numpy - 如何在 keras lambda 层中使用 tf.py_func 来包装 python 代码。ValueError:应定义 Dense 输入的最后一个维度。没有找到
问题描述
我想在使用 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 (last last call last) in () 21 22 ---> 23 model = model () 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 = tensor_shape.dimension_value(input_shape[-1])1180 if last_dim is None: -> 1181 raise ValueError('Dense
应定义'1182'的输入的最后一个维度。找到None
。') 1183 self.input_spec = InputSpec(min_ndim=2, axes={-1: last_dim})
ValueError:Dense
应定义输入的最后一个维度。找到None
。
解决方案
您可能需要指定 Lambda 层 z 的输出形状,tf.py_function 将给出 None 作为输出形状,这与紧随其后的 Dense 层不匹配。你应该试试:
z = Lambda(my_lambda_func)(x)
z.set_shape(x.shape)
推荐阅读
- c# - 使用 XAMARIN Flexlayout 布局控件
- excel - 如何将显式参数传递给 Range 对象?
- google-sheets - 如何将多个公式添加到长文本单元格?
- python - 如何从运行在 EMR 从节点上的 mapPartitions 中杀死所有 Spark 进程?
- android - 导航组件:通过底部导航将捆绑包传递到目的地
- angular - 单击另一列后如何从表列中删除 HTML 元素
- python - 当我尝试加载图像时,Qt Designer 错误与 Python 抛出错误
- kotlin - Kotlin 对字符串的可变映射进行排序
- .net - 在 MVC 应用程序中排队电子邮件
- ruby-on-rails - 使用枚举选择性别不起作用