我是深度学习的新手,并且在理解嵌入和传递4个特征向量(所有浮点数)序列到LSTM模型方面存在问题。我的模型如下所示:
f_data = np.array([[[259992.7, 11745.7, 0.0, 5500.0], [259068.5, 11745.7, 0.0, 5500.0]], [[250284.9, 11713.07, 1.0, 5730.0], [259043.3, 11728.2, 0.0, 5615.0], [238096.3, 11680.1, 0.0, 5730.0]]], dtype=object)
y_data = np.array([0,1])
train_x = tf.ragged.constant(f_data)
keras_model = tf.keras.Sequential([
tf.keras.layers.Input(shape=[None], dtype=tf.float64, ragged=True),
tf.keras.layers.Embedding(260000, 12),
tf.keras.layers.LSTM(32, use_bias=False, input_shape=(None, 4)),
tf.keras.layers.Dense(32),
tf.keras.layers.Activation(tf.nn.relu),
tf.keras.layers.Dense(1),
tf.keras.layers.Dropout(0.2)])
keras_model.compile(optimizer='rmsprop',
loss='binary_crossentropy', metrics=['acc'])
keras_model.fit(train_x, y_data, epochs=100, batch_size=32)
我在传递不同长度的序列时也遇到了麻烦,但粗糙的输入解决了它。这是我得到的错误:ValueError: lstm_45层输入0与层不兼容:期望的ndim=3,发现的ndim=4。完整形状收到:(None, None, None, 128)
tf.keras.layers。LSTM层期望输入形状为[batch, timesteps, feature]
的形状三维张量。在这种情况下,您正在馈送4D阵列。改变输入形状,
通过移除嵌入层其工作,
import tensorflow as tf
import numpy as np
f_data = np.array([[[259992.7, 11745.7, 0.0, 5500.0], [259068.5, 11745.7, 0.0, 5500.0]], [[250284.9, 11713.07, 1.0, 5730.0], [259043.3, 11728.2, 0.0, 5615.0], [238096.3, 11680.1, 0.0, 5730.0]]], dtype=object)
y_data = np.array([0,1])
train_x = tf.ragged.constant(f_data)
keras_model = tf.keras.Sequential([
tf.keras.layers.LSTM(32,use_bias=False, input_shape = (None,4)),
tf.keras.layers.Dense(32),
tf.keras.layers.Activation(tf.nn.relu),
tf.keras.layers.Dense(1)])
keras_model.compile(optimizer='rmsprop',
loss='binary_crossentropy', metrics=['acc'])
keras_model.fit(train_x, y_data, epochs=100, batch_size=32)
keras_model.summary()