【问题标题】:Keras network fit: loss is 'nan', accuracy doesn't changeKeras 网络拟合:损失是 'nan',准确性不会改变
【发布时间】:2019-08-21 05:40:27
【问题描述】:

我尝试适应 keras 网络,但在每个 epoch 中,损失都是“nan”,并且准确性不会改变...我尝试更改 epoch、层数、神经元数、学习率、优化器,我检查了 nan 数据数据集,通过不同的方式对数据进行归一化,但问题没有解决。感谢您的帮助。

np.random.seed(1337)

# example of input vector: [-1.459746, 0.2694708, ... 0.90043]
# example of output vector: [1, 0] or [0, 1]

model = Sequential()
model.add(Dense(1000, activation='tanh', init='normal', input_dim=503))
model.add(Dense(2, init='normal', activation='softmax'))

opt = optimizers.sgd(lr=0.01)
model.compile(loss="categorical_crossentropy", optimizer=opt, metrics=['accuracy'])

print(model.summary())

model.fit(x_train, y_train, batch_size=1000, nb_epoch=100, verbose=1)
99804/99804 [==============================] - 5s 52us/step - loss: nan - acc: 0.4938
Epoch 1/100
99804/99804 [==============================] - 5s 49us/step - loss: nan - acc: 0.4938
Epoch 2/100
99804/99804 [==============================] - 5s 51us/step - loss: nan - acc: 0.4938
Epoch 3/100
99804/99804 [==============================] - 5s 52us/step - loss: nan - acc: 0.4938
Epoch 4/100
99804/99804 [==============================] - 5s 52us/step - loss: nan - acc: 0.4938
Epoch 5/100
99804/99804 [==============================] - 5s 51us/step - loss: nan - acc: 0.4938
...

【问题讨论】:

    标签: python tensorflow keras neural-network


    【解决方案1】:

    首先将您的输出转换为分类,如Keras documentation 中所述:

    注意:使用 categorical_crossentropy 损失时,您的目标应该是分类格式。为了将整数目标转换为分类目标,您可以使用 Keras 实用程序 to_categorical:

    from keras.utils import to_categorical
    categorical_labels = to_categorical(int_labels, num_classes=None)
    

    【讨论】:

      【解决方案2】:

      哦,发现问题了!归一化后,输入向量中出现了一个 nan 神经元

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-12
        • 2021-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多