首页 文章

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

提问于
浏览
4

我对机器学习很陌生,最近我开始学习如何使用库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

1 回答

  • 1

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

    你这样做

    model.add(Dense(3))
    

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

    这是通过 first Dense图层中的 input_dim 参数完成的 .

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

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

    由于这是一个回归问题,使用'mse'作为损失应该有效(正如您正确选择的那样) .

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

    • 带输入样本的输入矩阵(每个属性一列,因此5列) . N乘5矩阵

    • 带输出样本的输出矩阵(每个属性一列,因此3列) . N乘3矩阵

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

相关问题