在使用 LSTM(长短期记忆网络)进行训练时,model.fit
方法的输入数据 X
和目标数据 y
的形状要求是不同的。具体来说:
1. 输入数据 X
的形状
LSTM 层期望输入数据 X
是三维张量,形状为 (samples, timesteps, features)
,其中:
-
samples
:样本数量,即数据集中有多少个样本。 -
timesteps
:时间步长,即每个样本包含多少个时间步。 -
features
:特征数量,即每个时间步有多少个特征。
例如,如果你有一个时间序列数据集,包含 100 个样本,每个样本有 10 个时间步,每个时间步有 1 个特征,那么输入数据 X
的形状应该是 (100, 10, 1)
。
2. 目标数据 y
的形状
目标数据 y
的形状取决于你的任务类型:
-
回归任务:如果任务是回归(例如预测未来的数值),
y
通常是一个二维张量,形状为(samples, 1)
或(samples,)
。 -
分类任务:如果任务是分类(例如预测类别),
y
通常是一个二维张量,形状为(samples, num_classes)
,其中num_classes
是类别的数量。
示例
回归任务
假设你有一个时间序列数据集,用于预测未来的数值:
Python复制
import numpy as np
# 示例数据
trainX = np.random.rand(100, 10, 1) # 100 个样本,每个样本 10 个时间步,每个时间步 1 个特征
trainY = np.random.rand(100, 1) # 100 个样本,每个样本 1 个目标值
# 定义 LSTM 模型
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
model = Sequential()
model.add(LSTM(4, input_shape=(10, 1))) # 时间步长为 10,特征数量为 1
model.add(Dense(1)) # 输出层,预测一个数值
model.compile(loss='mse', optimizer='adam')
# 训练模型
model.fit(trainX, trainY, batch_size=10, epochs=50)
分类任务
假设你有一个时间序列数据集,用于分类任务:
Python复制
import numpy as np
# 示例数据
trainX = np.random.rand(100, 10, 1) # 100 个样本,每个样本 10 个时间步,每个时间步 1 个特征
trainY = np.random.randint(0, 2, (100, 1)) # 100 个样本,每个样本 1 个类别(二分类)
# 定义 LSTM 模型
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
model = Sequential()
model.add(LSTM(4, input_shape=(10, 1))) # 时间步长为 10,特征数量为 1
model.add(Dense(1, activation='sigmoid')) # 输出层,预测一个类别(二分类)
model.compile(loss='binary_crossentropy', optimizer='adam')
# 训练模型
model.fit(trainX, trainY, batch_size=10, epochs=50)
总结
-
输入数据
X
:必须是三维张量,形状为(samples, timesteps, features)
。 -
目标数据
y
:-
回归任务:形状为
(samples, 1)
或(samples,)
。 -
分类任务:形状为
(samples, num_classes)
。
-