如何在 keras lambda 层中使用 tf.py_func 来包装 python 代码。 ValueError:应定义 Dense 输入的最后一个维度。没有找到
Posted
技术标签:
【中文标题】如何在 keras lambda 层中使用 tf.py_func 来包装 python 代码。 ValueError:应定义 Dense 输入的最后一个维度。没有找到【英文标题】:How to use tf.py_func in keras lambda layer to wrap python code. ValueError: The last dimension of the inputs to Dense should be defined. Found None 【发布时间】:2021-03-24 01:42:50 【问题描述】:我想在使用 keras 的自定义 lambda 层中使用 tf.py_fucn 包装 numpy 代码。
注意:为了简单起见,我展示了一个简单的 np.power 函数。
这就是我所做的
def my_func(x):
return np.power(x, 2)
def my_lambda_func(x):
return tf.py_function(my_func, [x], tf.float32)
def model():
inp = Input(shape=(2,))
x = Dense(128)(inp)
x = Dense(128)(x)
z = Lambda(my_lambda_func)(x)
output = Dense(1)(z)
model = Model(inputs=inp, outputs=output)
return model
model = model ()
model.compile(optimizer='adam', loss='mse')
然后我得到这个错误
ValueError Traceback(最近一次调用最后一次) 在 () 21 22 ---> 23 型号 = 型号 () 24 model.compile(optimizer='adam', loss='mse')
3 帧
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/layers/core.py in build(self, input_shape)
第1179章
如果 last_dim 为无,则为 1180:
-> 1181 raise ValueError('输入到Dense
的最后一个维度'
1182'应该被定义。找到None
.')
第1183章自己
ValueError:应定义Dense
输入的最后一个维度。找到None
。
【问题讨论】:
【参考方案1】:您可能需要指定 Lambda 层 z 的输出形状,tf.py_function 将给出 None 作为输出形状,这与紧随其后的 Dense 层不匹配。你应该试试:
z = Lambda(my_lambda_func)(x)
z.set_shape(x.shape)
【讨论】:
以上是关于如何在 keras lambda 层中使用 tf.py_func 来包装 python 代码。 ValueError:应定义 Dense 输入的最后一个维度。没有找到的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Tensorflow 2.x Keras 自定义层中使用多个输入?