gpt4 book ai didi

python - 类型错误 : __init__() takes at least 3 arguments (2 given) when subclassing Model class

转载 作者:行者123 更新时间:2023-12-01 08:22:57 24 4
gpt4 key购买 nike

我想使用 Tensorflow 和 Keras 创建一个简单的神经网络。当我尝试通过子类化模型类来实例化模型

class TwoLayerFC(tf.keras.Model):
def __init__(self, hidden_size, num_classes):
super(TwoLayerFC, self).__init__()
self.fc1 = keras.layers.Dense(hidden_size,activation=tf.nn.relu)
self.fc2 = keras.layers.Dense(num_classes)


def call(self, x, training=None):
x = tf.layers.flatten(x)
x = self.fc1(x)
x = self.fc2(x)

return x

这就是我测试网络的方式

def test_TwoLayerFC():
tf.reset_default_graph()
input_size, hidden_size, num_classes = 50, 42, 10
model = TwoLayerFC(hidden_size, num_classes)
with tf.device(device):
x = tf.zeros((64, input_size))
scores = model(x)

with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
scores_np = sess.run(scores)
print(scores_np.shape)

我收到错误:

TypeError: init() takes at least 3 arguments (2 given)

我关注了this教程,好像应该有两个参数。

最佳答案

我阅读了您的代码,看到正在创建 PyTorch 模型,包括第二个 Dense 层中存在两个传递数字的错误。

Keras 模型不应遵循与 PyTorch 模型相同的逻辑。

这个模型应该像这样创建:

input_tensor = Input(input_shape)
output_tensor = Flatten()(input_tensor)
output_tensor = Dense(hidden_size, activation='relu')(output_tensor)
output_tensor = Dense(num_classes)

model = keras.models.Model(input_tensor, output_tensor)

模型实例已准备好进行编译和训练:

 model.compile(optimizer=..., loss = ..., metrics=[...])
model.fit(x_train, y_train, epochs=..., batch_size=..., ...)

在 Keras 中没有理由子类化 Model,除非您是一位真正的高级用户,正在尝试一些非常规的事情。

顺便说一句,请注意不要将 tf.keras.anythingkeras.anything 混合。第一个是直接由tensorflow维护的Keras版本,而第二个是原始的Keras。它们并不完全相同,tensorflow 的版本似乎有更多错误,并且将两者混合在同一代码中听起来是一个坏主意。

关于python - 类型错误 : __init__() takes at least 3 arguments (2 given) when subclassing Model class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54505706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com