python LSTM编程中的坑

Pit in LSTM programming by python

众所周知,如果我们想训练一个LSTM网络,我们必须通过函数numpy.reshape()对训练数据集进行reshape,reshape的结果类似于[samples,time_steps,features]。但是,新形状受到原始形状的影响。看到一些博客讲LSTM编程把1当成time_steps,如果time_steps是其他数字,样本会相应变化。我的问题是samples是否等于batch_size

X = X.reshape(X.shape[0], 1, X.shape[1])

不,示例与 batch_size 不同。 samples 是您将拥有的样本总数。 batch_size 将是每个批次的大小或训练中使用的每个批次的样本数,例如 .fit。

例如,如果 samples=128 且 batch_size=16,那么在 .fit 调用期间,您的数据将被分成 8 批,每批包含 16 个样本。

另外请注意,time_steps 是每个样本中的总时间步长或观察值。将它作为 1 与 LSTM 没有多大意义,因为 RNN 的主要优势通常是学习时间模式。 time_step=1 时,将没有任何历史可以利用。下面是一个可能有帮助的例子:

假设您的工作是通过查看某人每分钟提供的呼吸率和心率来确定某人每小时是否活跃,即每小时测量 60 个样本的 2 个特征。 (这只是一个示例,如果您真的想这样做,请使用加速度计 :))假设您有 128 小时的标记数据。那么你的输入数据将是 (128, 60, 2) 的形状,你的输出将是 (128, 1) 的形状。

在这里,您有 128 个样本,每个样本有 60 个时间步长或观察值,以及两个特征。

接下来根据样本将数据拆分为训练、验证和测试。例如,您的训练数据、验证数据和测试数据的形状分别为 (96, 60, 2)、(16, 60, 2) 和 (16, 60, 2)。

如果您使用 batch_size=16,您的训练、验证和测试数据将分别有 6、1 和 1 个批次。

没有。样品不等于批量大小。样本表示数据集中的行数。您的训练数据集被分成若干批次并将其传递给网络进行训练。

简单来说,

假设您的数据集有 30 个样本,您将 batch_size 定义为 3。 这意味着将 30 个样本分成 10 个批次(30 个除以您定义的 batch_size = 10)。当你训练你的模型时,一次只有 3 行数据将被推送到神经网络,然后接下来的 3 行将被推送到神经网络。同样明智的是,整个数据集将推送到神经网络。

Samples/Batch_size = 批次数

请记住 batch_size 和批次数是两个不同的东西。