在tensorflow中包装一般的python函数

时间:2017-04-06 06:56:20

标签: python tensorflow keras

我的目的是在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,它也会失败。

0 个答案:

没有答案