如何为 LSTM 层的循环神经网络重塑张量
How to reshape tensor for Recurrent Neural Network for LSTM layer
我正在尝试训练 RNN,我的 X 输入形状是 (5018, 481)
,而 y 标签输入形状是 (5018,)
。我已将 X 和 y 都转换为以下格式的张量:
x_train_tensor = tf.convert_to_tensor(X, dtype=tf.float32)
y_train_tensor = tf.convert_to_tensor(y, dtype=tf.float32)
然后用下面的RNN keras模型架构:
model = keras.Sequential([
keras.layers.Dense(100, activation='elu', input_shape=(481,)),
keras.layers.LSTM(64, return_sequences=False, dropout=0.1, recurrent_dropout=0.1),
keras.layers.Dense(25, activation='elu'),
keras.layers.Dropout(0.5),
keras.layers.Dense(1, 'elu')
])
opt = keras.optimizers.Adam(lr=0.001)
model.compile(optimizer=opt, loss='mean_squared_error', metrics=['mse'])
model.fit(x_train_tensor, y_train_tensor, epochs=8)
我收到以下错误
ValueError: Input 0 of layer lstm_1 is incompatible with the layer:
expected ndim=3, found ndim=2. Full shape received: [None, 100]
有人有解决办法吗?
它期望得到 3 个维度:
如果您打印没有 LSTM 层的网络摘要:
model = keras.Sequential([
keras.layers.Dense(100, activation='elu', input_shape=(481,)),
keras.layers.Dense(25, activation='elu'),
keras.layers.Dropout(0.5),
keras.layers.Dense(1,activation= 'elu')
])
opt = keras.optimizers.Adam(lr=0.001)
model.compile(optimizer=opt, loss='mean_squared_error', metrics=['mse'])
model.summary()
你得到:
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_19 (Dense) (None, 100) 48200
_________________________________________________________________
dense_20 (Dense) (None, 25) 2525
_________________________________________________________________
dropout_7 (Dropout) (None, 25) 0
_________________________________________________________________
dense_21 (Dense) (None, 1) 26
=================================================================
Total params: 50,751
Trainable params: 50,751
Non-trainable params: 0
_________________________________________________________________
所以你的第一层有 2 个 dims (None,100)。
错误消息说 LSTM 层需要 3 个维度,所以扩展 1 个暗淡:
model = keras.Sequential([
keras.layers.Dense(100, activation='elu', input_shape=(481,)),
keras.layers.Reshape((100,1)),
keras.layers.LSTM(64, return_sequences=False, dropout=0.1, recurrent_dropout=0.1),
keras.layers.Dense(25, activation='elu'),
keras.layers.Dropout(0.5),
keras.layers.Dense(1,activation= 'elu')
])
opt = keras.optimizers.Adam(lr=0.001)
model.compile(optimizer=opt, loss='mean_squared_error', metrics=['mse'])
model.summary()
你会得到:
Model: "sequential_5"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_16 (Dense) (None, 100) 48200
_________________________________________________________________
reshape_2 (Reshape) (None, 100, 1) 0
_________________________________________________________________
lstm_4 (LSTM) (None, 64) 16896
_________________________________________________________________
dense_17 (Dense) (None, 25) 1625
_________________________________________________________________
dropout_6 (Dropout) (None, 25) 0
_________________________________________________________________
dense_18 (Dense) (None, 1) 26
=================================================================
Total params: 66,747
Trainable params: 66,747
Non-trainable params: 0
_________________________________________________________________
希望对你有所帮助。
我正在尝试训练 RNN,我的 X 输入形状是 (5018, 481)
,而 y 标签输入形状是 (5018,)
。我已将 X 和 y 都转换为以下格式的张量:
x_train_tensor = tf.convert_to_tensor(X, dtype=tf.float32)
y_train_tensor = tf.convert_to_tensor(y, dtype=tf.float32)
然后用下面的RNN keras模型架构:
model = keras.Sequential([
keras.layers.Dense(100, activation='elu', input_shape=(481,)),
keras.layers.LSTM(64, return_sequences=False, dropout=0.1, recurrent_dropout=0.1),
keras.layers.Dense(25, activation='elu'),
keras.layers.Dropout(0.5),
keras.layers.Dense(1, 'elu')
])
opt = keras.optimizers.Adam(lr=0.001)
model.compile(optimizer=opt, loss='mean_squared_error', metrics=['mse'])
model.fit(x_train_tensor, y_train_tensor, epochs=8)
我收到以下错误
ValueError: Input 0 of layer lstm_1 is incompatible with the layer:
expected ndim=3, found ndim=2. Full shape received: [None, 100]
有人有解决办法吗?
它期望得到 3 个维度: 如果您打印没有 LSTM 层的网络摘要:
model = keras.Sequential([
keras.layers.Dense(100, activation='elu', input_shape=(481,)),
keras.layers.Dense(25, activation='elu'),
keras.layers.Dropout(0.5),
keras.layers.Dense(1,activation= 'elu')
])
opt = keras.optimizers.Adam(lr=0.001)
model.compile(optimizer=opt, loss='mean_squared_error', metrics=['mse'])
model.summary()
你得到:
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_19 (Dense) (None, 100) 48200
_________________________________________________________________
dense_20 (Dense) (None, 25) 2525
_________________________________________________________________
dropout_7 (Dropout) (None, 25) 0
_________________________________________________________________
dense_21 (Dense) (None, 1) 26
=================================================================
Total params: 50,751
Trainable params: 50,751
Non-trainable params: 0
_________________________________________________________________
所以你的第一层有 2 个 dims (None,100)。 错误消息说 LSTM 层需要 3 个维度,所以扩展 1 个暗淡:
model = keras.Sequential([
keras.layers.Dense(100, activation='elu', input_shape=(481,)),
keras.layers.Reshape((100,1)),
keras.layers.LSTM(64, return_sequences=False, dropout=0.1, recurrent_dropout=0.1),
keras.layers.Dense(25, activation='elu'),
keras.layers.Dropout(0.5),
keras.layers.Dense(1,activation= 'elu')
])
opt = keras.optimizers.Adam(lr=0.001)
model.compile(optimizer=opt, loss='mean_squared_error', metrics=['mse'])
model.summary()
你会得到:
Model: "sequential_5"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_16 (Dense) (None, 100) 48200
_________________________________________________________________
reshape_2 (Reshape) (None, 100, 1) 0
_________________________________________________________________
lstm_4 (LSTM) (None, 64) 16896
_________________________________________________________________
dense_17 (Dense) (None, 25) 1625
_________________________________________________________________
dropout_6 (Dropout) (None, 25) 0
_________________________________________________________________
dense_18 (Dense) (None, 1) 26
=================================================================
Total params: 66,747
Trainable params: 66,747
Non-trainable params: 0
_________________________________________________________________
希望对你有所帮助。