我的目的是在keras中创建一个自定义图层,其权重矩阵的维度大于输入(输出维度相同),而额外的参数用于处理函数(权重%*%输入)。该函数不是用tensorflow编写的,这样做会非常繁琐,所以我尝试使用tensorflow的py_func。但是,NN打破了“ValueError:None values not supported”。
我自己的图层的主代码是Dense的代码,有一些更改。 W是具有维度[input_dim + n,output_dim]的权重矩阵。假设有一个带有n个参数的通用函数“func”,它应该在(W%*%Input)上进行求值。
def func(self,output):
do something
return something
现在我们将这个函数包装在call:
中def call(self, x, mask=None):
output = K.dot(x, self.W[self.n:,:])
if self.use_bias:
output = K.bias_add(output, self.bias)
if self.activation is not None:
output = tf.reshape(tf.py_func(self.func,[output],tf.float32),(-1,self.units))
output = self.activation(output)
return output
self.activation中出现“None”错误。 py_func在使用自己的会话时运行良好,但似乎这种嵌入Keras层不会提供预期的结果。如果func(x)=x*x
,它也会失败。