machine-learning - Keras 验证准确度为 0,并且在整个训练过程中保持不变
问题描述
我正在使用 Python 中的 Tensorflow/Keras 进行时间序列分析。整个 LSTM 模型看起来像,
model = keras.models.Sequential()
model.add(keras.layers.LSTM(25, input_shape = (1,1), activation = 'relu', dropout = 0.2, return_sequences = False))
model.add(keras.layers.Dense(1))
model.compile(optimizer = 'adam', loss = 'mean_squared_error', metrics=['acc'])
tensorboard = keras.callbacks.TensorBoard(log_dir="logs/{}".format(time()))
es = keras.callbacks.EarlyStopping(monitor='val_acc', mode='max', verbose=1, patience=50)
mc = keras.callbacks.ModelCheckpoint('/home/sukriti/best_model.h5', monitor='val_loss', mode='min', save_best_only=True)
history = model.fit(trainX_3d, trainY_1d, epochs=50, batch_size=10, verbose=2, validation_data = (testX_3d, testY_1d), callbacks=[mc, es, tensorboard])
我有以下结果,
Train on 14015 samples, validate on 3503 samples
Epoch 1/50
- 3s - loss: 0.0222 - acc: 7.1352e-05 - val_loss: 0.0064 - val_acc: 0.0000e+00
Epoch 2/50
- 2s - loss: 0.0120 - acc: 7.1352e-05 - val_loss: 0.0054 - val_acc: 0.0000e+00
Epoch 3/50
- 2s - loss: 0.0108 - acc: 7.1352e-05 - val_loss: 0.0047 - val_acc: 0.0000e+00
现在val_acc
保持不变。正常吗?这意味着什么?
解决方案
如 所表示的loss = 'mean_squared_error'
,您处于回归设置中,其中准确性毫无意义(仅在分类问题中才有意义)。
不幸的是,在这种情况下,Keras 不会“保护”您,坚持计算并报告“准确性”,尽管事实上它对您的问题没有意义且不合适 - 请参阅我在什么函数定义 Keras 中的准确性时的回答损失是均方误差(MSE)?
您应该简单地metrics=['acc']
从模型编译中删除,并且不要打扰 - 在回归设置中,MSE 本身可以(并且通常确实)也可以用作性能指标。
推荐阅读
- javascript - javascript - 等待不等待
- nginx - RedHat cockpit 和 nginx 无法登录
- .net - 打开应用程序 Growtopia CCS 时出现问题/错误
- c# - 从自定义属性获取 img 链接
- css - 元素超出窗口区域
- java - 如何使用 DefaultPrettyPrinter 缩进 JSON?
- slick.js - Slick Carousel + Lazysizes
- javascript - 松露错误:无法读取未定义的属性“调用”
- sql - 如果与变量比较,T-SQL 语句中的 LIKE 子句不返回值?
- javascript - 如何从用内部 HTML 编写的表单中获取数据?