【发布时间】:2020-02-11 11:47:21
【问题描述】:
(免责声明:我已将我的问题简化为重点,我想做的稍微复杂一些,但我在这里描述了核心问题。)
我正在尝试使用keras 构建一个网络来学习一些 5 x 5 矩阵的属性。
输入数据是一个 1000 x 5 x 5 numpy 数组的形式,其中每个 5 x 5 子数组代表一个矩阵。
我希望网络做的是使用矩阵中每一行的属性,所以我想将每个 5 x 5 数组拆分为单独的 1 x 5 数组,并将这 5 个数组中的每一个传递到下一个网络的一部分。
这是我目前所拥有的:
input_mat = keras.Input(shape=(5,5), name='Input')
part_list = list()
for i in range(5):
part_list.append(keras.layers.Lambda(lambda x: x[i,:])(input_mat))
dense_list = list()
for i in range(5):
dense_list.append( keras.layers.Dense(10, activation='selu',
use_bias=True)(part_list[i]) )
conc = keras.layers.Concatenate(axis=-1, name='Concatenate')(dense_list)
dense_out = keras.layers.Dense(1, name='D_out', activation='sigmoid')(conc)
model = keras.Model(inputs= input_mat, outputs=dense_out)
model.compile(optimizer='adam', loss='mean_squared_error')
我的问题是这似乎训练得不好,查看模型摘要我不确定网络是否按照我的意愿拆分输入:
Layer (type) Output Shape Param # Connected to
==================================================================================================
Input (InputLayer) (None, 5, 5) 0
__________________________________________________________________________________________________
lambda_5 (Lambda) (5, 5) 0 Input[0][0]
__________________________________________________________________________________________________
lambda_6 (Lambda) (5, 5) 0 Input[0][0]
__________________________________________________________________________________________________
lambda_7 (Lambda) (5, 5) 0 Input[0][0]
__________________________________________________________________________________________________
lambda_8 (Lambda) (5, 5) 0 Input[0][0]
__________________________________________________________________________________________________
lambda_9 (Lambda) (5, 5) 0 Input[0][0]
__________________________________________________________________________________________________
dense (Dense) (5, 10) 60 lambda_5[0][0]
__________________________________________________________________________________________________
dense_1 (Dense) (5, 10) 60 lambda_6[0][0]
__________________________________________________________________________________________________
dense_2 (Dense) (5, 10) 60 lambda_7[0][0]
__________________________________________________________________________________________________
dense_3 (Dense) (5, 10) 60 lambda_8[0][0]
__________________________________________________________________________________________________
dense_4 (Dense) (5, 10) 60 lambda_9[0][0]
__________________________________________________________________________________________________
Concatenate (Concatenate) (5, 50) 0 dense[0][0]
dense_1[0][0]
dense_2[0][0]
dense_3[0][0]
dense_4[0][0]
__________________________________________________________________________________________________
D_out (Dense) (5, 1) 51 Concatenate[0][0]
==================================================================================================
Total params: 351
Trainable params: 351
Non-trainable params: 0
Lambda 层的输入和输出节点在我看来是错误的,但恐怕我仍然难以理解这个概念。
【问题讨论】:
标签: arrays tensorflow keras