我对机器学习很陌生,最近我开始学习如何使用库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个浮点数的列表.

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

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

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

– smgr

最佳答案 如果您的最终输出有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.