gpt4 book ai didi

python - 如何在 Keras( tensorflow )中为 LSTM 正确塑造 2D 输入和输出?使输入为 3D 并输出为热编码时生成错误

转载 作者:行者123 更新时间:2023-12-01 23:11:41 24 4
gpt4 key购买 nike

对于一个类(class)项目,我们必须采用 2D 数据集并使用 LSTM NN 进行预测。我们将其与简单的 DNN 进行比较。

我需要 reshape 我的数据,以便它与神经网络一起工作,但我很难找到输入和输出的正确形状。我也可能设置了错误的神经网络——但它解决了我用 3D 数据处理的另一个问题。

我的 x_train.shape(2340, 590),我的 y 形状是 (2340,) .

我将 x_train reshape 为 (1, 2340, 590)

我对y进行了热编码——称为binary_labels

binary_labels.shape(2340,2)

总结相关输入形状:

x_train.shape = (1, 2340, 590)

binary_labels.shape = (2340, 2)

问题:

运行模型会生成一个错误,提示输入数组应具有相同数量的样本。

我尝试将 binary_labels reshape 为 (1,2340,2) - 但在运行 NN 时,我得到 ValueError:

Empty training data.

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 (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

最佳答案

如果我很好地理解你的问题,那么问题就在这里:

x_train.shape(2340, 590),因此您有 2340 个大小为 (590,) 的样本
如果您像您那样 reshape 数据:(1, 2340, 590),您将只提供一个大小为 (2340, 590) 的样本,因为 keras 模型输入形状定义如下:(Batch_size, size1, size2)

因此,为了让您的模型正常工作,您只需要像这样 reshape 数据:

x_train = np.expand_dims(x_train, -1) #new shape = (2340, 590, 1)

尝试一下并告诉我是否更好!

关于python - 如何在 Keras( tensorflow )中为 LSTM 正确塑造 2D 输入和输出?使输入为 3D 并输出为热编码时生成错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56958465/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com