【问题标题】:使用激活 softmax 和损失函数 categorical_crossentropy 的损失为 NaN
【发布时间】:2023-04-03 10:53:01
【问题描述】:

我正在努力使这个模型发挥作用。最初,x.shape 是 (6703, 56),y.shape 是具有形状 (6703, ) 的二元列。然后我跑

y = y.to_numpy()
y = y.astype("float32")
y = tf.keras.utils.to_categorical(y, 2)

现在y.shape 是 (6703, 2)。我跑

X_train, X_test, Y_train, Y_test = train_test_split(x, y, test_size=0.2, random_state=42)

现在

  • X_train 形状为 (5362, 56)
  • Y_train 形状为 (5362, 2)
  • X_test 形状为 (1341, 56)
  • Y_test 形状为 (1341, 2)

然后我建立模型:

model = tf.keras.models.Sequential(name="3layers")

model.add(keras.layers.Dense(N_HIDDEN,
                             input_shape=(len(X_train[0]),),
                             name="dense1",
                             activation="relu"))

model.add(keras.layers.Dropout(DROPOUT))
    
model.add(keras.layers.Dense(N_HIDDEN,
                             name="dense2",
                             activation="relu"))

model.add(keras.layers.Dropout(DROPOUT))

model.add(keras.layers.Dense(NB_CLASSES,
                             name="dense3",
                             activation="softmax"))
    
model.summary()

model.compile(optimizer="SGD",  #SGD  adam
              loss="categorical_crossentropy",
              metrics=["accuracy"])
    
model.fit(X_train, Y_train,
          batch_size=BATCH_SIZE,
          epochs=EPOCHS,
          verbose=VERBOSE,
          validation_split=VALIDATION_SPLIT)
    
test_loss, test_acc = model.evaluate(X_test, Y_test)

总结是我所期望的:

dense1 (Dense)              (None, 64)                3648      
dropout_18 (Dropout)        (None, 64)                0         
dense2 (Dense)              (None, 64)                4160      
dropout_19 (Dropout)        (None, 64)                0         
dense3 (Dense)              (None, 2)                 130    

但输出是

Epoch 1/5
 > 429/429 [==============================] - 1s 1ms/step - loss: nan - accuracy: 0.5141 - val_loss: nan - val_accuracy: 0.4884
Epoch 2/5
 > 429/429 [==============================] - 0s 1ms/step - loss: nan - accuracy: 0.5143 - val_loss: nan - val_accuracy: 0.4884
Epoch 3/5
 > 429/429 [==============================] - 0s 987us/step - loss: nan - accuracy: 0.5143 - val_loss: nan - val_accuracy: 0.4884

我尝试更改了很多参数,但我卡住了。

【问题讨论】:

  • 您在训练模型之前是否对数据进行了标准化?
  • 能否在使用tf.keras.utils.to_categorical(y, 2)前后添加y的数据示例?
  • 不,我没有规范化,这是关于股票数据历史的,我不确定如何在不破坏有意义的关系的情况下正确地做到这一点

标签: python tensorflow keras loss softmax


【解决方案1】:

我找到了它是什么。 x 矩阵中有一些“无”值导致了问题。删除它们,它开始评估数字损失。准确性很差,但这将是另一个需要解决的问题。

【讨论】:

    猜你喜欢
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2018-02-01
    • 2020-12-22
    • 2021-02-26
    • 2021-07-18
    相关资源
    最近更新 更多