Keras 中情景模式的多对一循环网络
Many to one recurrent network for episodic patterns in Keras
我正在尝试使用 Keras 构建循环神经网络。我将 .
中的讨论作为基础
但是,在最初的讨论中提出的解决方案中,据我了解,没有"episode"的概念。让我解释一下我的意思。
假设您有 6 个实例 x1、x2、x3、x4、x5、x6。给定大小为 3 的循环 window,第一个输出为 x3。我将其称为 y3。所以,没有情节概念的输入输出对看起来像这样:
- [x1, x2, x3], [y3]
- [x2, x3, x4], [y4]
- [x3, x4, x5], [y5]
- [x4, x5, x6], [y6]
但是,我的数据具有明确的边界。我会在这个例子中有两集,所以训练对看起来像这样:
- [x1, x2, x3], [y3]
- [x4, x5, x6], [y6]
我的问题:是否可以在 Keras 中执行此操作?
我应该如何保持我的输入输出对组织?对于 x3 和 x6 以外的所有输入,网络应该不产生预测(无输出)。
PS:我可能会用LSTM或者经典递归。如果有使用 LSTM 的解决方案,我希望能够在每一集之后重置内存。
提前致谢。
我相信这可以通过退后一步并重组和重塑您提供给 RNN 模型本身的数据来实现。冒着听起来冗长的风险,我提供以下解释:
你应该有一个 X 和一个 y。我建议将这两个作为 3D NumPy 数组,其中
- array[i] 访问特定序列 i
- array[i][j] 访问特定序列的特定时间步长 j i
- array[i][j][k] 在特定时间步 j 访问特定特征 k 对于特定序列i(注意 k 对于 y 的长度将等于 1,因为我们每个时间步仅预测一个目标)
所以假设你有 8 个序列、3 个时间步长和 5 个特征
shape(X)
# (8, 3, 5)
shape(y)
# (8, 3, 1)
现在假设您已经以这种方式构建数据,您所要做的就是确保 X 和 y训练实例以您想要的方式相互匹配。要使用您的注释:
print(X[0][0])
# [x1, x2, x3]
print(y[0][0])
# [y3]
print(X[1][0])
# [x4, x5, x6]
print(y[1][0])
# [y6]
现在假设您已经有了这个 (序列、时间步长、特征) 3D NumPy 数组结构,用于您输入模型的数据。只需从 X 和 y 中删除您不想删除的训练实例。
- [x1, x2, x3], [y3]
[x2, x3, x4], [y4]
[x3, x4, x5], [y5]
- [x4, x5, x6], [y6]
我正在尝试使用 Keras 构建循环神经网络。我将
但是,在最初的讨论中提出的解决方案中,据我了解,没有"episode"的概念。让我解释一下我的意思。
假设您有 6 个实例 x1、x2、x3、x4、x5、x6。给定大小为 3 的循环 window,第一个输出为 x3。我将其称为 y3。所以,没有情节概念的输入输出对看起来像这样:
- [x1, x2, x3], [y3]
- [x2, x3, x4], [y4]
- [x3, x4, x5], [y5]
- [x4, x5, x6], [y6]
但是,我的数据具有明确的边界。我会在这个例子中有两集,所以训练对看起来像这样:
- [x1, x2, x3], [y3]
- [x4, x5, x6], [y6]
我的问题:是否可以在 Keras 中执行此操作?
我应该如何保持我的输入输出对组织?对于 x3 和 x6 以外的所有输入,网络应该不产生预测(无输出)。
PS:我可能会用LSTM或者经典递归。如果有使用 LSTM 的解决方案,我希望能够在每一集之后重置内存。
提前致谢。
我相信这可以通过退后一步并重组和重塑您提供给 RNN 模型本身的数据来实现。冒着听起来冗长的风险,我提供以下解释:
你应该有一个 X 和一个 y。我建议将这两个作为 3D NumPy 数组,其中
- array[i] 访问特定序列 i
- array[i][j] 访问特定序列的特定时间步长 j i
- array[i][j][k] 在特定时间步 j 访问特定特征 k 对于特定序列i(注意 k 对于 y 的长度将等于 1,因为我们每个时间步仅预测一个目标)
所以假设你有 8 个序列、3 个时间步长和 5 个特征
shape(X)
# (8, 3, 5)
shape(y)
# (8, 3, 1)
现在假设您已经以这种方式构建数据,您所要做的就是确保 X 和 y训练实例以您想要的方式相互匹配。要使用您的注释:
print(X[0][0])
# [x1, x2, x3]
print(y[0][0])
# [y3]
print(X[1][0])
# [x4, x5, x6]
print(y[1][0])
# [y6]
现在假设您已经有了这个 (序列、时间步长、特征) 3D NumPy 数组结构,用于您输入模型的数据。只需从 X 和 y 中删除您不想删除的训练实例。
- [x1, x2, x3], [y3]
[x2, x3, x4], [y4][x3, x4, x5], [y5]- [x4, x5, x6], [y6]