如何重构keras层的输出?

2024-09-29 21:57:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我想重建输入层的输出形状,例如,如果是(无,42),我从第一个神经元开始,从第一个到第七个,然后向右滑动一个神经元,从第二个到第八个,依此类推。这样,输出层就是形状(None,36,7)

我正在使用keras.layers.Lambda()层来实现这一点,但它不能正常工作,而且尺寸也不是我所期望的。我写的代码如下:

Inpt_lyr = keras.Input(shape = (42,))
for k in range(42 - 7 + 1):
    F = keras.layers.Lambda(lambda x, i, j: x[:,j : j + i])
    F.arguments ={ 'i' : 7, 'j' : k}
    tmp_rfrm = F(Inpt_lyr)
    lst_rfrm.append(tmp_rfrm)
cnctnt_lyr = keras.layers.merge.Concatenate(axis = 0)(lst_rfrm)
tmp_dns = keras.layers.Dense(3 , activation = 'softmax')(cnctnt_lyr)
tmp_model = Model(Inpt_lyr, tmp_dns)
tmp_model.compile(loss = 'categorical_crossentropy', optimizer = 'adam')
tmp_model.summary()

我期望conctlyr有这个形状(None,36,7),但它是(None,7) 并给出了误差 ValueError:Graph disconnected:无法获取“input\u 3”层的张量张量(“input\u 3:0”,shape=(?,42),dtype=float32)的值。访问以下以前的层时没有问题:['input\u 4']


Tags: lambdanoneinputmodeldnslayerstmpkeras
1条回答
网友
1楼 · 发布于 2024-09-29 21:57:18

您的方法在我看来是合理的,但是目前正沿着批处理轴连接张量,这在本例中是不可取的

我建议在滑动车窗时扩展尺寸1:

for k in range(42 - 7 + 1):
    F = keras.layers.Lambda(lambda x, i, j: x[:, None, j: j + i])
    # F(Inpt_lyr).shape=(?, 1, 7)

然后沿着展开的轴连接张量:

cnctnt_lyr = keras.layers.merge.Concatenate(axis=1)(lst_rfrm)
# cnctnt_lyr.shape=(?, 36, 7)

相关问题 更多 >

    热门问题