python - 喀拉斯 : training with an array as an input

标签 python machine-learning neural-network keras

我是机器学习的新手,最近我开始学习如何使用库 Keras 在 Python 上实现基本的神经网络。

我从一个基本示例开始(训练网络以便它可以预测值 y = f(x) = x)。

model = Sequential()
model.add(Dense(10, input_dim=1, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1))
model.compile(loss='mse', optimizer='adam')
data = np.array([x for x in range(0,1000)])

for i in range(0, 1000):
   model.fit([np.array([data[i]]), np.array([data[i]]), nb_epoch=1, batch_size=1, verbose=0)

我现在想应用类似的算法来训练网络,因此从整数列表 L 中,它将返回函数 f 的三个值的列表(基本上:[f(L,0), f(L ,1), f(L,2)]).所以这次的输入是一个包含 5 个整数的数组,而期望的返回输出是一个包含 3 个 float 的列表。

但是,我没有设法正确编写 for 循环中的 fit 方法,我收到一条错误消息:“预期会看到 1 个数组,但得到的是以下 2 个数组的列表:...”。我尝试使用 Dense 构造函数的一些参数(input_dim、input_shape、input_size),但我似乎仍然无法使其工作...

所以基本上,有谁知道如何正确实现一个将数组作为输入并返回不同长度数组的网络?

非常感谢您的帮助和支持,

-- 管理人员

最佳答案

如果您的最终输出有 3 个维度,您的最后一个 Dense 层必须有 3 列。

你这样做

model.add(Dense(3))

如果您的输入有 5 个维度,您的第一个密集矩阵将有 5 行。

这是通过第一个 Dense 层中的input_dim 参数完成的。

model.add(Dense(10, input_dim=2, activation='relu'))

您现在可以看到,第一个密集层矩阵是一个 2 行乘 10 列的矩阵。由于下一个矩阵必然有 10 行(以便维度匹配),因此在下一层中您只需定义列数。因此,您将单个维度参数传递给每个后续层。

由于这是一个回归问题,使用“mse”作为损失应该可行(因为您选择正确)。

在这种情况下你的数据集应该是两个矩阵:

  • 带有输入样本的输入矩阵(每个属性一列,所以有 5 列)。 N乘5矩阵
  • 带有输出样本的输出矩阵(每个属性一列,所以 3 列)。 N乘3矩阵

在这两种情况下,你应该有相同的行数:样本总数 N。

关于python - 喀拉斯 : training with an array as an input,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42913869/

相关文章:

python - 如何在 Django 中查询最大值到最小值?

python - 进行 Leave-One-Group-Out 交叉验证时如何应用过采样?

python - 如何在pybrain中实现正则化

neural-network - Keras + 索引错误

python - 如何在 PyTorch 中标准化图像

python - Django 1.4 SimpleListFilter 'selected' 选项问题

python - sklearn 库中 .score() 和 .predict 的区别?

python - 如何将训练数据分成更小的批处理来解决内存错误

neural-network - Pybrain 强化学习示例

python - (python) 如何将数字转换为符号 ' * '