【发布时间】:2019-07-05 23:43:33
【问题描述】:
我是机器学习的新手。我无法将数据输入我的网络。
这是我收到的错误:
ValueError: Error when checking input: expected cu_dnnlstm_22_input to have 3 dimensions, but got array with shape (2101, 17)
我尝试在密集层之前添加model.add(Flatten())。非常感谢您的帮助!
BATCH_SIZE = 64
test_size_length = int(len(main_df)*TESTING_SIZE)
training_df = main_df[:test_size_length]
validation_df = main_df[test_size_length:]
train_x, train_y = training_df.drop('target',1).to_numpy(), training_df['target'].tolist()
validation_x, validation_y = validation_df.drop('target',1).to_numpy(), validation_df['target'].tolist()
#train_x.shape is (2101, 17)
model = Sequential()
# model.add(Flatten())
model.add(CuDNNLSTM(128, input_shape=(train_x.shape), return_sequences=True))
model.add(Dropout(0.2))
model.add(BatchNormalization())
model.add(CuDNNLSTM(128, return_sequences=True))
model.add(Dropout(0.1))
model.add(BatchNormalization())
model.add(CuDNNLSTM(128))
model.add(Dropout(0.2))
model.add(BatchNormalization())
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(2, activation='softmax'))
opt = tf.keras.optimizers.Adam(lr=0.001, decay=1e-6)
# Compile model
model.compile(
loss='sparse_categorical_crossentropy',
optimizer=opt,
metrics=['accuracy']
)
tensorboard = TensorBoard(log_dir="logs/{}".format(NAME))
filepath = "RNN_Final-{epoch:02d}-{val_acc:.3f}" # unique file name that will include the epoch and the validation acc for that epoch
checkpoint = ModelCheckpoint("models/{}.model".format(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max')) # saves only the best ones
# Train model
history = model.fit(
train_x, train_y,
batch_size=BATCH_SIZE,
epochs=EPOCHS,
validation_data=(validation_x, validation_y),
callbacks=[tensorboard, checkpoint],
)
# Score model
score = model.evaluate(validation_x, validation_y, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
# Save model
model.save("models/{}".format(NAME))
【问题讨论】:
-
我可以直接从这样的数据帧中获取我的 train_x 和 train_y:``` train_x, train_y = training_df.drop('target',1).values, training_df['target' ].values train_x=train_x.astype('float32') ``` 我的数据看起来像这样:``` array([[ 0. , 0. , 0. , ..., 0.1344 , -0.45 , -0.5844 ], [ 0. , 0. , 0. , ..., 0.1293 , -0.4209 , -0.5502 ], [ 0. , 0. , 0. , ..., 0.1238 , -0.3933 , -0.5171 ], ... ., ```
-
不确定是否有区别,但我数组中的每一行都是经过预处理的一堆库存数据。所以,由于数据形状是 2101x17,我有 2101 天的股票数据。请记住,我是这个(和 Python)的新手
标签: python tensorflow machine-learning lstm