【发布时间】:2020-05-29 22:46:41
【问题描述】:
我正在尝试使用带有 tensorflow 的 RNN 进行二进制分类。我的训练和测试数据的标签是 0 和 1。当我尝试在我完成的模型上使用我的 RNN 时,它会为每个样本返回几乎相同的预测:
model.predict(holdout_x[400:500])
array([[-4.116061 , -1.3410028],
[-4.1405125, -1.3521721],
[-4.171639 , -1.3665637],
[-4.1515126, -1.356805 ],
[-4.1466017, -1.3546 ],
[-4.1306634, -1.3479614],
[-4.1259437, -1.3455958],
[-4.1161146, -1.3414239],
[-4.135389 , -1.3504343],
[-4.1410503, -1.3527975],
[-4.1413574, -1.3528765],
[-4.1483955, -1.3562942],
[-4.208541 , -1.383785 ],
[-4.212775 , -1.3856986],
[-4.2415767, -1.3998709],
[-4.250041 , -1.4033642],
[-4.2150397, -1.3866954],
[-4.2094893, -1.3843822],
[-4.1996937, -1.380172 ],
[-4.0357003, -1.3077384],
[-4.030937 , -1.3050178],
[-4.0273657, -1.3041242],
[-4.0044518, -1.2939129],
[-4.003211 , -1.2922926],
[-4.015193 , -1.2991027],
[-3.9627366, -1.2757865],
[-3.9252415, -1.2586563],
[-3.936089 , -1.265475 ],
[-3.8994193, -1.2497959],
[-3.918683 , -1.2593002],
[-3.7673016, -1.1924615],
[-3.7568831, -1.1912583]], dtype=float32)
这是我的模型的外观:
model = tf.keras.Sequential()
model.add(keras.layers.LSTM(200, input_shape=(200, 7), return_sequences=True))
model.add(keras.layers.LSTM(200, input_shape=(200, 7), return_sequences=True))
model.add(keras.layers.LSTM(200))
# Add a Dense layer with 10 units.
model.add(keras.layers.Dense(2))
model.summary()
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
如何防止这种情况发生?
【问题讨论】:
-
我不得不遗漏很多预测,因为 stackoverflow 不喜欢它们
-
如何设置
layers.Dense(1)并使用loss="binary_crossentropy" -
您的网络似乎没有学到任何东西。您可以发布每个时期图的训练和验证损失吗?首先要检查的是训练损失是否在减少。
-
在实施了我在这个论坛上获得的所有技巧后,我的损失是静态的,为 0.6932。我已经完成了 30 个 epoch,准确率在 49.5 和 50.5 之间交替变化。所以我的网络大概没有学到任何东西。
标签: tensorflow keras