1.问题背景
我需要通过tf.keras.Sequential()创建一个神经网络,但是这个神经网络又比较复杂,我需要把通过class创建的网络作为一个层同增加到这网络中。如果我的class中的call的参数超过2个,就会报错:
class mymodel(tf.keras.Model):
def __init__(self):
super(mymodel,self).__init__()
self.dense = tf.keras.layers.Dense(10,input_shape=(5,))
self.dense1 = tf.keras.layers.Dense(1)
# self.submodle=submodel(input_size=5)
def __call__(self,input,z):
x=self.dense(input)
output = self.dense1(x)
return output
model_1 = tf.keras.Sequential()
model_1.add(tf.keras.layers.Dense(10,input_shape=(5,)))
model_1.add(mymodel())
len(model_1.weights)
报错:
TypeError: __call__() missing 1 required positional argument: 'z'
2.问题原因
出现这个问题的原因是,如果是把通过class()创建的模型通过add增加到 tf.keras.Sequential()模型中,要求class()的call中只能有1个参数,inputs,这里会默认call(self,input)第二个参数就是inputs,这个参数的命名并不局限于inputs。
3. 解决方法
去掉报错的class中call函数的多余参数,保持只有一个input参数。
事实上,这也意味着class类的网络需要做大量的修改。