【发布时间】:2020-01-21 16:19:19
【问题描述】:
如何将两个输入放入 tensorflow lambda 层?我试过了:
channel_input=Input(shape=(4,),dtype='complex64',name='channel_input')
...
realed_ffted_channel1 = Dense(2*N_c,activation='relu')(realed_ffted_channel)
precoded_data = Lambda(lambda x,y: tf.concat([x,y],1))([encoding_x,realed_ffted_channel1])
但是,我收到此错误
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-29-9332eac3e7cf> in <module>()
10
11 #Precoding Encoder
---> 12 precoded_data = Lambda(lambda x,y: tf.concat([x,y],1))([encoding_x,realed_ffted_channel1])
13 encoder_data = Dense(3*N_c,activation='relu')(precoded_data)
14 encoder_data1 = Dense(N_c,activation='relu')(encoder_data)
1 frames
/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/layers/core.py in call(self, inputs, mask, training)
820 arguments['training'] = training
821 with variable_scope.variable_creator_scope(self._variable_creator):
--> 822 return self.function(inputs, **arguments)
823
824 def _variable_creator(self, next_creator, **kwargs):
TypeError: <lambda>() missing 1 required positional argument: 'y'
暗示第二个输入 y 未通过。
【问题讨论】:
-
我不记得了,但我相信 lambda 在这里只接受一个参数。尝试做
lambda xy: tf.concat(*xy,1) -
很遗憾,它没有用。嗯,那么我们不能在一个层中使用两个输入???
-
做
lambda xy: tf.concat(xy, 1)。输入作为包含您传入内容的列表接收。此外,如果您的图层仅此功能,请考虑使用Concatenate图层。 -
非常感谢。它适用于 tf.concat。但它不适用于
conved_data = Lambda(lambda x,y: conv_channel(x,y))(iffted_encoded_data,channel_input)之类的类似代码,我将其更改为conved_data = Lambda(lambda xy: conv_channel(xy))(iffted_encoded_data,channel_input)但不起作用 -
@이홍재 在这种情况下,它将是
lambda xy: conv_channel(xy[0], xy[1]),或lambda xy: conv_channel(*xy)。xy这是一个列表,你必须相应地使用它的内容。tf.concat接收一个列表作为参数,所以你可以直接传递xy,或者如果你喜欢[xy[0], xy[1]],但是conv_channel有两个参数,你需要从xy显式解包。
标签: python tensorflow keras lambda concat