当前位置:  开发笔记 > 编程语言 > 正文

零精度训练在Keras的神经网络

如何解决《零精度训练在Keras的神经网络》经验,为你挑选了1个好方法。

我在Keras训练回归问题的神经网络.为什么输出只有一个Dimension,每个Epoch的精度始终显示为acc:0.0000e + 00?

像这样:

1000/199873 [..............................] - ETA:5s - 损失:0.0057 - acc:0.0000e + 00

2000/199873 [..............................] - ETA:4s - 损失:0.0058 - acc:0.0000e + 00

3000/199873 [..............................] - ETA:3s - 损失:0.0057 - acc:0.0000e + 00

4000/199873 [..............................] - ETA:3s - 损失:0.0060 - acc:0.0000e + 00 ...

198000/199873 [============================>.] - ETA:0s - 损失:0.0055 - acc:0.0000e + 00

199000/199873 [============================>.] - ETA:0s - 损失:0.0055 - acc:0.0000e + 00

199873/199873 [==============================] - 4s - 损失:0.0055 - acc:0.0000e + 00 - val_loss :0.0180 - val_acc:0.0000e + 00

大纪元50/50

但是如果输出是二维或更高,则准确性没有问题.

我的模型如下:`

input_dim = 14
batch_size = 1000
nb_epoch = 50
lrelu = LeakyReLU(alpha = 0.1)

model = Sequential()
model.add(Dense(126, input_dim=input_dim)) #Dense(output_dim(also hidden wight), input_dim = input_dim)
model.add(lrelu) #Activation

model.add(Dense(252))
model.add(lrelu)
model.add(Dense(1))
model.add(Activation('linear'))

model.compile(loss= 'mean_squared_error', optimizer='Adam', metrics=['accuracy'])
model.summary()
history = model.fit(X_train_1, y_train_1[:,0:1],
                    batch_size=batch_size,
                    nb_epoch=nb_epoch,
                    verbose=1,
                    validation_split=0.2)

loss = history.history.get('loss')
acc = history.history.get('acc')
val_loss = history.history.get('val_loss')
val_acc = history.history.get('val_acc')

'''saving model'''
from keras.models import load_model
model.save('XXXXX')
del model

'''loading model'''
model = load_model('XXXXX')

'''prediction'''
pred = model.predict(X_train_1, batch_size, verbose=1)
ans = [np.argmax(r) for r in y_train_1[:,0:1]]

mikal94305.. 11

问题是您的最终模型输出具有线性激活,使模型成为回归,而不是分类问题.当模型根据类正确地对数据进行分类时,定义"准确度",但由于其连续属性,"准确性"实际上没有为回归问题定义.

要么将准确性作为度量标准去掉并切换到完全回归,要么将问题转化为分类问题,使用loss='categorical_crossentropy'activation='softmax'.

这与您的问题类似:链接

有关更多信息,请参阅:StackExchange



1> mikal94305..:

问题是您的最终模型输出具有线性激活,使模型成为回归,而不是分类问题.当模型根据类正确地对数据进行分类时,定义"准确度",但由于其连续属性,"准确性"实际上没有为回归问题定义.

要么将准确性作为度量标准去掉并切换到完全回归,要么将问题转化为分类问题,使用loss='categorical_crossentropy'activation='softmax'.

这与您的问题类似:链接

有关更多信息,请参阅:StackExchange

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有