Для проекта класса мы должны взять набор 2D-данных и использовать LSTM NN для прогнозирования.Мы сравниваем его с простым DNN.
Мне нужно изменить свои данные, чтобы они работали с NN, и у меня возникли проблемы с поиском правильных форм для ввода и вывода.Возможно, я также неправильно настроил свой NN - но он работал с другой проблемой, которую я делал с трехмерными данными.
Мой x_train.shape
равен (2340, 590)
, а моя y
форма (2340,)
.
Я изменил x_train
на (1, 2340, 590)
I, один код в горячем видеy
- который называется binary_labels
binary_labels.shape
равен (2340,2)
Обобщение соответствующих форм ввода:
x_train.shape = (1, 2340, 590)
binary_labels.shape = (2340, 2)
Проблема:
При запуске модели генерируется ошибка, что входные массивы должны иметь одинаковое количество выборок.
Я попытался изменить binary_labels
на (1,2340,2)
-но при запуске NN я получаю ValueError
:
Пустые данные о тренировках.
rnn_model = keras.Sequential([
keras.layers.LSTM(2, input_shape=(X_train.shape[1], X_train.shape[2]), return_sequences = True),
keras.layers.LSTM(590, return_sequences = True, activation=tf.nn.relu),
keras.layers.LSTM(590, return_sequences = True, activation=tf.nn.relu),
keras.layers.LSTM(590, return_sequences = True, activation=tf.nn.relu),
keras.layers.Dense(2, activation='sigmoid')
])
rnn_model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
rnn_model.fit(X_train, binary_labels, epochs=5, validation_split = 0.2)
Я ожидаю, что модель будет работать!Вместо этого я получаю сообщение об ошибке, которое не могу решить.
Кто-нибудь имеет представление о том, как я могу это исправить?
Соответствующая часть сообщения об ошибке:
ValueError: Входные массивы должныиметь то же количество образцов, что и целевые массивы.Найдено 1 входных выборок и 2340 целевых выборок
Полное сообщение об ошибке:
--------------------------------------------------------------------------- ValueError Traceback (последний вызов был последним) в 11 метриках = ['precision']) 12 ---> 13 rnn_model.fit (X_train, binary_labels, epochs = 5, validation_split = 0.2)
~ / Desktop / Program_Downloads / anaconda3 / envs / uwdatasci420 / lib / python3.6 / site-packages / tenorflow / python / keras / engine / training.py в нужном состоянии (self, x, y, batch_size), эпохи, многословные, обратные вызовы, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, рабочие, use_multiprocessing, ** kwargs) 64-й областиНет, эпоха будет работать до тех пор, пока не будет исчерпан входной набор данных.-> 643 validation_steps: релевантно, только если указано validation_data
и 644 является итератором набора данных или набора данных.Общее количество шагов (пакетов по 645 образцов), которые нужно нарисовать перед остановкой при выполнении проверки
~ / Desktop / Program_Downloads / anaconda3 / envs / uwdatasci420 / lib / python3.6 / site-packages / tenorflow / python / keras/engine/training_arrays.py в соответствии (self, model, x, y, batch_size, эпохи, подробный, обратные вызовы, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq * 1067, k67, **)
~ / Desktop / Program_Downloads / anaconda3 / envs / uwdatasci420 / lib / python3.6 / site-packages / tenorflow / python / keras / engine / training.py в _standardize_user_data (self, x, y, sample_weight, class_weight, batch_size), check_steps, steps_name, steps, validation_split, shuffle, extract_tensors_from_dataset) 2463, если не self.inputs: 2464
Нам нужно использовать x_input
для установки входов модели.
-> 2465 2466# Если входными данными является итератор набора данных в графическом режиме или если это нетерпеливый итератор 2467 # и только одна партия выборокТребуется, мы извлекаем данные
~ / Desktop / Program_Downloads / anaconda3 / envs / uwdatasci420 / lib / python3.6 / site-packages / tenorflow / python / keras / engine / training_utils.py в check_array_lengths (входные данные, target, weight) 617 "" "618 batch_count = int (len (index_array) / batch_size) -> 619 #, чтобы изменить форму, мы должны быть чисто делимыми на размер пакета 620 # мы прячем дополнительные элементы и повторно добавляем их после перетасовки621 last_batch = index_array [batch_count * batch_size:]
ValueError: входные массивы должны иметь то же количество выборок, что и
целевые массивы. Найдено 1 входных образцов и 2340 целевых образцов