为 LSTM 准备 Pandas DataFrame
Preparing Pandas DataFrame for LSTM
我正在尝试使用 Keras 拟合 LSTM 分类器,但不了解如何准备训练数据。
我目前有两个训练数据数据框。 X_train 包含来自 IMU 数据的 48 个手工制作的时间特征,y_train 包含代表地形的相应标签(4 种)。这些数据框的形状如下:
X_train = X_train.values.reshape(X_train.shape[0],X_train.shape[1],1)
print(X_train.shape, y_train.shape)
**(268320, 48, 1) (268320,)**
模型使用 batch_size = (32,5,48)
:
def def_model():
model = Sequential()
model.add(LSTM(units=144,batch_size=(32, 5, 48),return_sequences=True))
model.add(Dropout(0.5))
model.add(Dense(144, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(4, activation='softmax'))
model.compile(optimizer=Adam(learning_rate=0.0001), loss='categorical_crossentropy', metrics=['categorical_accuracy'])
return model
model_LSTM = def_model()
LSTM_history = model_LSTM.fit(X_train, y_train, epochs=15, validation_data=(X_valid, y_valid), verbose=1)
我遇到的错误:
ValueError: Shapes (32, 1) and (32, 48, 4) are incompatible
对如何修复这个特定错误有任何见解,对 Keras 的预期有任何直觉吗?
您的批量大小中的 5 是多少? LSTM 层中的 batch_size
参数表示您的数据应采用 (batch_size, time_steps, feature_per_time_step)
形式。如果我理解正确,你的 data has time_steps = 1
和 feature_per_time_step = 48
.
这是工作代码的示例以及每个代码的形状。
def def_model():
model = Sequential()
model.add(LSTM(units=144,batch_size=(32, 1, 48),return_sequences=True))
model.add(Dropout(0.5))
model.add(Dense(144, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(4, activation='softmax'))
model.compile(optimizer=Adam(learning_rate=0.0001), loss='categorical_crossentropy', metrics=['categorical_accuracy'])
return model
model_LSTM = def_model()
X_train = np.random.random((10000,1,48))
y_train = np.random.random((10000,4))
y_train = y_train.reshape(-1,1,4)
data = tf.data.Dataset.from_tensor_slices((X_train, y_train)).batch(32)
model_LSTM.fit(data, epochs=15, verbose=1)
在拟合函数中传递 data
而不是 x_train
和 y_train
将正确拟合模型。
如果你想在你的数据中有 5 个时间步长,你将必须以这样的方式创建你的 X_train 以使其具有 (n_samples,5,48)
.
的形状
我正在尝试使用 Keras 拟合 LSTM 分类器,但不了解如何准备训练数据。
我目前有两个训练数据数据框。 X_train 包含来自 IMU 数据的 48 个手工制作的时间特征,y_train 包含代表地形的相应标签(4 种)。这些数据框的形状如下:
X_train = X_train.values.reshape(X_train.shape[0],X_train.shape[1],1)
print(X_train.shape, y_train.shape)
**(268320, 48, 1) (268320,)**
模型使用 batch_size = (32,5,48)
:
def def_model():
model = Sequential()
model.add(LSTM(units=144,batch_size=(32, 5, 48),return_sequences=True))
model.add(Dropout(0.5))
model.add(Dense(144, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(4, activation='softmax'))
model.compile(optimizer=Adam(learning_rate=0.0001), loss='categorical_crossentropy', metrics=['categorical_accuracy'])
return model
model_LSTM = def_model()
LSTM_history = model_LSTM.fit(X_train, y_train, epochs=15, validation_data=(X_valid, y_valid), verbose=1)
我遇到的错误:
ValueError: Shapes (32, 1) and (32, 48, 4) are incompatible
对如何修复这个特定错误有任何见解,对 Keras 的预期有任何直觉吗?
您的批量大小中的 5 是多少? LSTM 层中的 batch_size
参数表示您的数据应采用 (batch_size, time_steps, feature_per_time_step)
形式。如果我理解正确,你的 data has time_steps = 1
和 feature_per_time_step = 48
.
这是工作代码的示例以及每个代码的形状。
def def_model():
model = Sequential()
model.add(LSTM(units=144,batch_size=(32, 1, 48),return_sequences=True))
model.add(Dropout(0.5))
model.add(Dense(144, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(4, activation='softmax'))
model.compile(optimizer=Adam(learning_rate=0.0001), loss='categorical_crossentropy', metrics=['categorical_accuracy'])
return model
model_LSTM = def_model()
X_train = np.random.random((10000,1,48))
y_train = np.random.random((10000,4))
y_train = y_train.reshape(-1,1,4)
data = tf.data.Dataset.from_tensor_slices((X_train, y_train)).batch(32)
model_LSTM.fit(data, epochs=15, verbose=1)
在拟合函数中传递 data
而不是 x_train
和 y_train
将正确拟合模型。
如果你想在你的数据中有 5 个时间步长,你将必须以这样的方式创建你的 X_train 以使其具有 (n_samples,5,48)
.