【发布时间】: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