如何重组Keras层的输出?

主塔楼

我想重构输入层的输出形状,例如,如果它是(None,42),则从第一个神经元开始,取第1至第7个,然后向右滑动一个神经元,取第2至第8个,以此类推。这样,输出层将为形状(无,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()

我期望conct_lyr的形状为(None,36,7),但是它的形状为(None,7),并且还会出现错误ValueError:图形断开:无法获取张量Tensor(“ input_3:0”,shape =(? ,42),dtype = float32)在“ input_3”层。顺利访问了以下先前的层:['input_4']

里维纳斯

您的方法对我来说似乎很明智,但目前正沿着批处理轴连接张量,在这种情况下,这是不可取的。

我建议在滑动窗口时扩大尺寸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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章