使用 keras 模型,输出与输入的完美线性关系的精度为零,我不确定我是否错误地解释了精度或对我的代码做了错误的操作,任何帮助将不胜感激
我尝试添加更多层、更多纪元等等,但没有任何改变
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from keras import models
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras import optimizers
from sklearn.model_selection import KFold
from sklearn.preprocessing import MinMaxScaler
tf.reset_default_graph()
from keras.optimizers import SGD
siz=100000
inp=np.random.randint(100, 1000000 , size=[siz,1])
a1=1.5;
uop=np.dot(inp,a1)
normzer_inp = MinMaxScaler()
inp_norm = normzer_inp.fit_transform\
(inp)
normzer_uop = MinMaxScaler()
uop_norm = normzer_uop.fit_transform\
(uop)
X=inp_norm
Y=uop_norm
kfold = KFold(n_splits=2, random_state=None, shuffle=False)
cvscores = []
opti_SGD = SGD(lr=0.01, momentum=0.9)
model1 = Sequential()
accc_trn=0
accc_tst=0
for train, test in kfold.split(X, Y):
model = Sequential()
model.add(Dense(16, input_dim=X.shape[1], activation='relu'))
model.add(Dense(16, activation='relu'))
model.add(Dense(1, activation='linear'))
model.compile(loss='mean_squared_error', optimizer=opti_SGD,\
metrics=['accuracy'])
history = model.fit(X[train], Y[train], \
validation_data=(X[test], Y[test]), \
epochs=10,batch_size=2048, verbose=2)
_, train_acc = model.evaluate(X[train], Y[train], verbose=0)
_, test_acc = model.evaluate(X[test], Y[test], verbose=0)
print('Train: %.3f, Test: %.3f' % (train_acc, test_acc))
plt.plot(history.history['acc'], label='train')
plt.plot(history.history['val_acc'], label='test')
plt.legend()
plt.show()
cvscores.append(test_acc * 100)
print("%.2f%% (+/- %.2f%%)" % (np.mean(cvscores)\
, np.std(cvscores)))
预期准确率约为 100%,收到的准确率约为 0%
使用 50000 个样本进行训练,使用 50000 个样本进行验证 纪元 1/10 - 0s - 损失:0.1351 - acc:2.0000e-05 - val_loss:0.0476 - val_acc:2.0000e-05 纪元 2/10 - 0s - 损失:0.0386 - acc:2.0000e-05 - val_loss:0.0243 - val_acc:2.0000e-05 纪元 3/10 - 0s - 损失:0.0146 - acc:2.0000e-05 - val_loss:0.0063 - val_acc:2.0000e-05 纪元 4/10 - 0s - 损失:0.0029 - acc:2.0000e-05 - val_loss:6.9764e-04 - val_acc:2.0000e-05 纪元 5/10 - 0s - 损失:2.8476e-04 - acc:2.0000e-05 - val_loss:9.0012e-05 - val_acc:2.0000e-05 纪元 6/10 - 0s - 损失:8.0603e-05 - acc:2.0000e-05 - val_loss:6.6961e-05 - val_acc:2.0000e-05 纪元 7/10 - 0s - 损失:6.3046e-05 - acc:2.0000e-05 - val_loss:5.2784e-05 - val_acc:2.0000e-05 纪元 8/10 - 0s - 损失:5.0725e-05 - acc:2.0000e-05 - val_loss:4.3357e-05 - val_acc:2.0000e-05 纪元 9/10 - 0s - 损失:4.2132e-05 - acc:2.0000e-05 - val_loss:3.6418e-05 - val_acc:2.0000e-05 纪元 10/10 - 0s - 损失:3.5651e-05 - acc:2.0000e-05 - val_loss:3.1116e-05 - val_acc:2.0000e-05 训练:0.000,测试:0.000
0.00% (+/- 0.00%)
最佳答案
您正在执行回归任务。准确性用于分类类型的任务,您可以在样本总数中测量其中有多少样本被正确预测。
对于回归任务,通常模型的性能是由其验证损失来定义的。这可能是均方误差(正如您已经做的那样)或平均绝对误差等。
只需将模型编译行更改为:
model.compile(loss='mean_squared_error', optimizer=opti_SGD)
现在,不会打印任何准确性详细信息。
关于python - 如何正确地与 keras 模型相互渗透精度,给出输入与输出的完美线性关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57644641/