#python #tensorflow #keras #deep-learning #lstm
Вопрос:
Я пытаюсь запустить простой RNN с некоторыми данными, извлеченными из csv-файла. Я уже предварительно обработал свои данные и разделил их на набор поездов и набор проверок, но я получаю ошибку выше. Это моя сетевая структура и то, что я пытался сделать до сих пор. Мои формы (33714,12) для x_train, (33714,) для y_train, (3745,12) для x_val и (3745,) для y_val.
model = Sequential() # LSTM LAYER IS ADDED TO MODEL WITH 128 CELLS IN IT model.add(LSTM(128, input_shape=x_train.shape, activation='tanh', return_sequences=True)) model.add(Dropout(0.2)) # 20% DROPOUT ADDED FOR REGULARIZATION model.add(BatchNormalization()) model.add(LSTM(128, input_shape=x_train.shape, activation='tanh', return_sequences=True)) # ADD ANOTHER LAYER model.add(Dropout(0.1)) model.add(BatchNormalization()) model.add(LSTM(128, input_shape=x_train.shape, activation='tanh', return_sequences=True)) model.add(Dropout(0.2)) model.add(BatchNormalization()) model.add(Dense(32, activation='relu')) # ADD A DENSE LAYER model.add(Dropout(0.2)) model.add(Dense(2, activation='softmax')) # FINAL CLASSIFICATION LAYER WITH 2 CLASSES AND SOFTMAX # --------------------------------------------------------------------------------------------------- # OPTIMIZER SETTINGS opt = tf.keras.optimizers.Adam(learning_rate=LEARNING_RATE, decay=DECAY) # MODEL COMPILE model.compile(loss='sparse_categorical_crossentropy', optimizer=opt, metrics=['accuracy']) # CALLBACKS tensorboard = TensorBoard(log_dir=f"logs/{NAME}") filepath = "RNN_Final-{epoch:02d}-{val_acc:.3f}" checkpoint = ModelCheckpoint("models/{}.model".format(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max')) # save only the best ones # RUN THE MODEL history = model.fit(x_train, y_train, epochs=EPOCHS, batch_size=BATCH_SIZE, validation_data=(x_val, y_val), callbacks=[tensorboard, checkpoint])
Ответ №1:
Хотя это даст вам большую ценность, возможно, лучше всего было бы сгладить тот, который имеет больший размер.
Тензорный поток.керас.слои.Сглаживание() в основном приведет к тому, что ваши выходные данные будут иметь умноженные значения, т. е. входные данные: (Нет, 5, 5) -gt; Сглаживание() -gt;gt; (Нет, 25)
Для вашего примера это даст вам:
(Нет, 33714,12) -gt; (Нет, 404568).
Я не совсем уверен, сработает ли это при изменении размеров фигур, но именно так я преодолел проблему с несовместимыми фигурами: ожидается: (Нет, x), получено: (Нет, y, x).