python - 如何正确地与 keras 模型相互渗透精度,给出输入与输出的完美线性关系?

标签 python keras deep-learning

使用 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/

相关文章:

python - 应用组卷积,其中每个组都被限制为具有相同的权重

python - python 函数生成源的 SCons 和依赖项

tensorflow - 创建自定义图层时,Keras 自定义对象的目的是什么?

python - 具有非方形图像的 CNN 自动编码器

keras - 内核大小应该与一维卷积中的字长相同吗?

python - AttributeError :'Tensor' 对象没有属性 '_keras_history'

python - 将字符串对象更改为数据框中的数字

python - 使用 Selenium 单击特定的隐藏按钮(多个具有相同的名称),但我可以匹配按钮所在的特定表

android - Kivy 按功能更新标签

python - 为什么单独执行 softmax 和 crossentropy 与使用 softmax_cross_entropy_with_logits 一起执行它们会产生不同的结果?