pandas - 如何为 Keras LSTM 正确构建 3D 输入
问题描述
我有一个数据集,其中包含许多及时的快照观察和一个 1 或 0 作为每个观察的标签。假设每个观察包含 3 个特征。我想训练一个 LSTM,它将接受一系列 n 个观察并尝试将第 n 个观察分类为 1 或 0。
因此,如果我们有一个如下所示的数据集:
# X = [[0, 1, 1], [1, 0, 0], [1, 1, 1], [1, 1, 0]]
# y = [1, 0, 1, 0]
# so X[0] = y[0], X[1] = y[1]
# . and I would like to input X[0] + X[1] to classify X[1] as y[1]
# . How would I need to structure this below?
X = [[0, 1, 1], [1, 0, 0], [1, 1, 1], [1, 1, 0]]
y = [1, 0, 1, 0]
def create_model():
model = Sequential()
# input_shape[0] is equal to 2 timesteps?
# input_shape[1] is equal to the 3 features per row?
model.add(LSTM(20, input_shape=(2, 3)))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()
m = create_model()
m.fit(X, y)
因此,我希望X[0]
并X[1]
成为一次训练迭代的输入,应归类为y[1]
.
我的问题是这个。如何构建模型以正确获取此输入?我很困惑input_shape
,,,features
等......input_length
batches
解决方案
下面的代码片段可能有助于澄清:
from keras.models import Sequential
from keras.layers import LSTM, Dense
import numpy as np
# Number of samples = 4, sequence length = 3, features = 2
X = np.array( [ [ [0, 1], [1, 0,], [1, 1] ],
[ [1, 1], [1, 1,], [1, 0] ],
[ [0, 1], [1, 0,], [0, 0] ],
[ [1, 1], [1, 1,], [1, 1] ]] )
y = np.array([[1], [0], [1], [0]])
print(X)
print(X.shape)
print(y.shape)
model = Sequential()
model.add(LSTM(20, input_shape=(3, 2)))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()
model.fit(X, y)
此外,在 Keras 文档页面上:https : //keras.io/getting-started/sequential-model-guide/ 查看底部附近的“用于序列分类的堆叠 LSTM”的示例。它可能会有所帮助。
通常使用 Keras,批量维度/样本维度没有在层中指定 - 它是从输入数据中自动推断出来的。
我希望这有帮助。
推荐阅读
- javascript - React-apollo:更改变量而不在轮询查询中重新获取
- c# - 如何将BMP图像文件加载到Image控件的ImageSource中,内存占用少,性能好
- angular - 谷歌甘特图轴自定义 [标签和日期/时间]
- json - 使用接口解组json数据时出错?
- python - 使用数据读取器时出现 ImmediateDeprecationError
- scala - 如何在 Scala WorkSheet 和 Akka 中引用配置文件?
- c# - 从 IEnumerable 中的倒数第二个项目跳过
- ios - 设置 UILabel 的文本没有内存泄漏?
- python - 在 Tensorflow 中进行图像处理的黑色输出(使用 jpeg 解码器进行神经网络训练)
- angular - MemoizedSelector 不可分配给“字符串”类型的参数