【问题标题】:ValueError of Input and Output values during LSTM trainingLSTM训练期间输入和输出值的ValueError
【发布时间】:2022-06-28 23:21:02
【问题描述】:

我试图使用一些随机数据来实现一个基本的 LSTM 网络,但在执行代码时出现以下错误

'''

Traceback (most recent call last):
  File "C:/Users/dell/Desktop/test run for LSTM thingy.py", line 39, in <module>
    history = model.fit(x_train, y_train, epochs=1, batch_size=16, verbose=1)
  File "C:\Users\dell\AppData\Local\Programs\Python\Python310\lib\site-packages\keras\utils\traceback_utils.py", line 67, in error_handler
    raise e.with_traceback(filtered_tb) from None
  File "C:\Users\dell\AppData\Local\Temp\__autograph_generated_fileu1zdna1b.py", line 15, in tf__train_function
    retval_ = ag__.converted_call(ag__.ld(step_function), (ag__.ld(self), ag__.ld(iterator)), None, fscope)
ValueError: in user code:

    File "C:\Users\dell\AppData\Local\Programs\Python\Python310\lib\site-packages\keras\engine\training.py", line 1051, in train_function  *
        return step_function(self, iterator)
    File "C:\Users\dell\AppData\Local\Programs\Python\Python310\lib\site-packages\keras\engine\training.py", line 1040, in step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    File "C:\Users\dell\AppData\Local\Programs\Python\Python310\lib\site-packages\keras\engine\training.py", line 1030, in run_step  **
        outputs = model.train_step(data)
    File "C:\Users\dell\AppData\Local\Programs\Python\Python310\lib\site-packages\keras\engine\training.py", line 890, in train_step
        loss = self.compute_loss(x, y, y_pred, sample_weight)
    File "C:\Users\dell\AppData\Local\Programs\Python\Python310\lib\site-packages\keras\engine\training.py", line 948, in compute_loss
        return self.compiled_loss(
    File "C:\Users\dell\AppData\Local\Programs\Python\Python310\lib\site-packages\keras\engine\compile_utils.py", line 201, in __call__
        loss_value = loss_obj(y_t, y_p, sample_weight=sw)
    File "C:\Users\dell\AppData\Local\Programs\Python\Python310\lib\site-packages\keras\losses.py", line 139, in __call__
        losses = call_fn(y_true, y_pred)
    File "C:\Users\dell\AppData\Local\Programs\Python\Python310\lib\site-packages\keras\losses.py", line 243, in call  **
        return ag_fn(y_true, y_pred, **self._fn_kwargs)
    File "C:\Users\dell\AppData\Local\Programs\Python\Python310\lib\site-packages\keras\losses.py", line 1787, in categorical_crossentropy
        return backend.categorical_crossentropy(
    File "C:\Users\dell\AppData\Local\Programs\Python\Python310\lib\site-packages\keras\backend.py", line 5119, in categorical_crossentropy
        target.shape.assert_is_compatible_with(output.shape)

    ValueError: Shapes (None, 133, 1320) and (None, 133, 5) are incompatible
'''

这就是我的代码现在的样子:

import tensorflow as tf
x_train = tf.random.normal((28, 133, 1320))
y_train = tf.random.normal((28, 133, 1320))
model = tf.keras.Sequential()
model.add(tf.keras.layers.LSTM(5,activation='tanh',recurrent_activation='sigmoid', input_shape=(x_train.shape[1],x_train.shape[2]),return_sequences=True))
model.add(tf.keras.layers.Dense(5, activation= "softmax"))
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.0001), loss='categorical_crossentropy', metrics=['accuracy'])
model.summary()
history = model.fit(x_train, y_train, epochs=1, batch_size=16, verbose=1)

谁能帮我调试这段代码,因为我需要在另一个涉及相似形状的 X 和 Y 输入数据的项目中使用类似的东西,我无法找到解决问题的方法。我知道这与损失函数有关,但仅此而已。

Y 形 - (28, 133, 1320) X 形状 - (28, 133, 1320) 需要的类别 - 5

【问题讨论】:

  • 但是你的模型的输出与 Y 的形状不匹配。看看你的数据,问问自己你到底想做什么
  • @AloneTogether 哦,我需要重塑最后一层的输出以匹配 Y 的形状吗?

标签: python tensorflow keras lstm recurrent-neural-network


【解决方案1】:

您目前正在尝试使用 5 个类别进行分类分类,但 y 的形状为 (28, 133, 1320)。它不是那样工作的。此外,当您使用categorical_crossentropy 时,您需要一个热编码标签。这是一个作为方向的工作示例:

import tensorflow as tf

x_train = tf.random.normal((28, 133, 1320))

# one-hot encoded labels
y_train = tf.keras.utils.to_categorical(tf.random.uniform((28,), maxval=5, dtype=tf.int32))

model = tf.keras.Sequential()
model.add(tf.keras.layers.LSTM(5,activation='tanh',recurrent_activation='sigmoid', input_shape=(x_train.shape[1],x_train.shape[2]), return_sequences=False))
model.add(tf.keras.layers.Dense(5, activation= "softmax"))
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.0001), loss='categorical_crossentropy', metrics=['accuracy'])
model.summary()
history = model.fit(x_train, y_train, epochs=1, batch_size=16, verbose=1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 2018-01-10
    • 2020-02-09
    • 1970-01-01
    • 2020-01-16
    • 2021-05-09
    • 1970-01-01
    相关资源
    最近更新 更多