tensorflow keras模型预测每个试验的相似值

tensorflow keras模型预测每个试验的相似值,tensorflow,keras,Tensorflow,Keras,我试图用一个带有tensorflow的RNN进行二元分类。m y训练和测试数据的标签为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.14660

我试图用一个带有tensorflow的RNN进行二元分类。m y训练和测试数据的标签为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'])
如何防止这种情况发生?

更改
model.compile(优化器='adam',loss='binary\u crossentropy',metrics=['accurity'])

将损失更改为:
loss='binary\u crossentropy'
,因为您正在进行二进制分类


在进行二进制分类时,最后应该只有一个密集节点,将其更改为
model.add(keras.layers.Dense(1))

理论上,可能有各种原因。然而,在这个例子中有一件事需要澄清

稀疏分类交叉熵期望您为预测提供概率(值从0到1),除非您使用
from\u logits=True
实例化它。但是,您的最后一层没有指定激活。因此,输出值不限于[0,1]


我首先将最后一层更改为
model.add(keras.layers.Dense(2,activation='softmax'))
。然后确保你的地面真相类标签以正确的格式提供(根据)。

我不得不省略很多预测,因为stackoverflow不喜欢它们设置
层。密集(1)
和使用
loss=“binary\u crossentropy”
似乎你的网络没有学到任何东西。你能按历元图公布培训和验证损失吗?首先要检查的是,培训损失是否在减少。在实现了我在这个论坛上得到的所有提示之后,我的损失是静态的,为0.6932。我已经做了30个纪元,精度在49.5和50.5之间交替。因此,我的网络可能没有学到任何东西。我做到了,但似乎网络仍然倾向于一个站点,即使训练数据是完全50/50平衡的,尝试改变LSTM层的单位,在LSTM后添加两个密集层,并尝试实施