Keras:以数组作为输入进行训练

5 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)
Run Code Online (Sandbox Code Playgroud)

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

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

因此,基本上,没有人知道如何正确实现以数组作为输入并返回不同长度的数组的网络吗?

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

-smgr

小智 5

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

你这样做

model.add(Dense(3))
Run Code Online (Sandbox Code Playgroud)

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

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

model.add(Dense(10, input_dim=2, activation='relu'))
Run Code Online (Sandbox Code Playgroud)

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

由于这是一个回归问题,因此使用 'mse' 作为损失应该可以工作(如您正确选择的那样)。

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

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

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

  • 非常感谢您的详细解释!我的代码仍有一些小错误需要修复,但这部分现在已完全可操作,非常感谢。 (2认同)