我是tensorflow的新手,我正在尝试构建一个自定义层,它接受多个输入(即x,y,A)并返回z。在这一层中,w是可训练参数。我的代码是:
import tensorflow as tf
import tensorflow.keras as tfK
from keras import backend as K
import numpy as np
class MyLayer(tfK.layers.Layer):
def __init__(self, x, y, A):
super().__init__()
def build(self, x.shape, y.shape, A.shape):
self.w= self.add_weight(
shape=(x.shape[-1]),
initializer="random_normal",
trainable=True,
)
def call(self, x, y, A):
alpha = K.abs(tf.matmul(A,x) - y)/tf.matmul(A,(x_w))
beta = K.abs(tf.matmul(A,x) - y)/tf.matmul(A,(x-w))
LHS = tf.matmul(A,x)
cond = K.abs(LHS) < y
lowerProj = (1-beta) * x + beta * w
upperProj = (1-alpha) * x + alpha * w
z = tf.where(cond, upperProj, lowerProj)
return z
当我运行上面的代码(只是想检查它是否工作),
A = tf.convert_to_tensor(np.array([[1,2],[2,-1]]), dtype=tf.float32)
y = tf.constant(1, shape= (2,1), dtype=tf.float32)
x = tf.constant(0.5, shape= (2,1), dtype=tf.float32)
inputs = x,y,A
NN = MyLayer(x.shape[0],y.shape[0],A.shape)
output = NN(inputs)
print(output)
我得到以下错误:TypeError:MyLayer.build()缺少2个必需的位置参数:'y_shape','A_shape'
如何正确构建此层?我非常感谢任何反馈。
1条答案
按热度按时间83qze16e1#
当调用方法接受多个参数时,构建方法签名接受一个列表,而不是多个参数。试试这个.
另外,不要单独导入Keras-只需使用tf. keras。