【发布时间】:2019-11-19 08:36:19
【问题描述】:
对于一个类项目,我们必须采用 2D 数据集并使用 LSTM NN 进行预测。我们将其与简单的 DNN 进行比较。
我需要重塑我的数据,以便它与 NN 一起使用,并且在为输入和输出找到正确的形状时遇到了麻烦。我也可能错误地设置了我的神经网络——但它解决了我在处理 3D 数据时遇到的另一个问题。
我的x_train.shape 是(2340, 590),我的y 形状是(2340,)。
我将x_train 改造成(1, 2340, 590)
我一个热编码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: Input arrays should have the same number of samples as target arrays. Found 1 input samples and 2340 target samples
整个错误消息:
> --------------------------------------------------------------------------- ValueError Traceback (most recent call
> last) <ipython-input-224-36b1852bd7a7> in <module>
> 11 metrics=['accuracy'])
> 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/tensorflow/python/keras/engine/training.py
> in fit(self, x, y, batch_size, epochs, verbose, callbacks,
> validation_split, validation_data, shuffle, class_weight,
> sample_weight, initial_epoch, steps_per_epoch, validation_steps,
> validation_freq, max_queue_size, workers, use_multiprocessing,
> **kwargs)
> 641 `tf.data` dataset or a dataset iterator, and 'steps_per_epoch'
> 642 is None, the epoch will run until the input dataset is exhausted.
> --> 643 validation_steps: Only relevant if `validation_data` is provided and
> 644 is a dataset or dataset iterator. Total number of steps (batches of
> 645 samples) to draw before stopping when performing validation
>
> ~/Desktop/Program_Downloads/anaconda3/envs/uwdatasci420/lib/python3.6/site-packages/tensorflow/python/keras/engine/training_arrays.py
> in fit(self, model, x, y, batch_size, epochs, verbose, callbacks,
> validation_split, validation_data, shuffle, class_weight,
> sample_weight, initial_epoch, steps_per_epoch, validation_steps,
> validation_freq, **kwargs)
>
> ~/Desktop/Program_Downloads/anaconda3/envs/uwdatasci420/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py
> in _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 if not self.inputs: 2464
> # We need to use `x_input` to set the model inputs.
> -> 2465 2466 # If input data is a dataset iterator in graph mode or if it is an eager 2467 # iterator and only one batch
> of samples is required, we fetch the data
>
> ~/Desktop/Program_Downloads/anaconda3/envs/uwdatasci420/lib/python3.6/site-packages/tensorflow/python/keras/engine/training_utils.py
> in check_array_lengths(inputs, targets, weights)
> 617 """
> 618 batch_count = int(len(index_array) / batch_size)
> --> 619 # to reshape we need to be cleanly divisible by batch size
> 620 # we stash extra items and reappend them after shuffling
> 621 last_batch = index_array[batch_count * batch_size:]
>
> ValueError: Input arrays should have the same number of samples as
> target arrays. Found 1 input samples and 2340 target samples
【问题讨论】:
标签: python tensorflow keras lstm recurrent-neural-network