why does it say this: "TypeError: __call__() missing 1 required positional argument: 'inputs'"
why does it say this: "TypeError: __call__() missing 1 required positional argument: 'inputs'"
我正在尝试制作一个自定义的类似 vgg 的模型,具有 dropout 和 swish 激活功能。我完全不明白这里的问题是什么。我是初学者,所以也许我完全错了。不过我不这么认为,因为我以教程和指南为例。
这里是代码:
from keras.models import Sequential
from keras.layers import Dense, Conv2D, MaxPooling2D, Dropout
from keras.layers import Flatten, Activation
from keras.applications.vgg16 import VGG16
from keras.models import Model
from keras import backend as K
def swish(x):
return K.sigmoid(x) * x
custom_vgg = Sequential()
img_width = 224
img_height = 224
vgg_model = VGG16(include_top=False, weights='imagenet',input_shape=(img_width, img_height, 3))
print(vgg_model.get_config())
#vgg_model.save_weights('models/vgg_weights.h5')
for layer in vgg_model.layers:
if layer.__class__.__name__=='MaxPooling2D':
layer.trainable = False
custom_vgg.add(layer(activation = swish))
custom_vgg.add(Dropout(0.4))
else :
custom_vgg.add(layer)
custom_vgg.add(Flatten())
custom_vgg.add(Dense(1024,activation=swish))
custom_vgg.add(Dense(1024,activation=swish))
custom_vgg.add(Dense(128, activation = "softmax"))
custom_vgg.compile(optimizer = "adam", loss = "categorical_crossentropy", metrics = ["accuracy"])
custom_vgg.summary()
控制台这样说:
Traceback (most recent call last):
File "/Users/shavkatsultanov/Documents/SCHUETZ/tensor_flow/vgg_swish.py", line 20, in <module>
custom_vgg.add(layer(activation = swish))
TypeError: __call__() missing 1 required positional argument: 'inputs'
我想知道,因为我尝试过类似的事情,遍历图层并添加到另一个模型,并且它奏效了。此外,当它位于第 20 行时,不应期待任何 'inputs' 或其他什么?
如果有人能在这里提供帮助,那就太好了,谢谢!
edit:我想知道关于 if 语句的问题,询问 class_name,是否有问题?真的希望有人能解决这个问题
custom_vgg.add(layer(activation = swish))
您正在调用一个 layer
对象(这不是创建层,它是调用您从现有模型获得的层)。显然 keras 层是可调用的,layer(...)
是一堆内部逻辑的包装器(那是......我认为不是很好 API)。
无论哪种方式,只是...不要调用图层。
我正在尝试制作一个自定义的类似 vgg 的模型,具有 dropout 和 swish 激活功能。我完全不明白这里的问题是什么。我是初学者,所以也许我完全错了。不过我不这么认为,因为我以教程和指南为例。
这里是代码:
from keras.models import Sequential
from keras.layers import Dense, Conv2D, MaxPooling2D, Dropout
from keras.layers import Flatten, Activation
from keras.applications.vgg16 import VGG16
from keras.models import Model
from keras import backend as K
def swish(x):
return K.sigmoid(x) * x
custom_vgg = Sequential()
img_width = 224
img_height = 224
vgg_model = VGG16(include_top=False, weights='imagenet',input_shape=(img_width, img_height, 3))
print(vgg_model.get_config())
#vgg_model.save_weights('models/vgg_weights.h5')
for layer in vgg_model.layers:
if layer.__class__.__name__=='MaxPooling2D':
layer.trainable = False
custom_vgg.add(layer(activation = swish))
custom_vgg.add(Dropout(0.4))
else :
custom_vgg.add(layer)
custom_vgg.add(Flatten())
custom_vgg.add(Dense(1024,activation=swish))
custom_vgg.add(Dense(1024,activation=swish))
custom_vgg.add(Dense(128, activation = "softmax"))
custom_vgg.compile(optimizer = "adam", loss = "categorical_crossentropy", metrics = ["accuracy"])
custom_vgg.summary()
控制台这样说:
Traceback (most recent call last):
File "/Users/shavkatsultanov/Documents/SCHUETZ/tensor_flow/vgg_swish.py", line 20, in <module>
custom_vgg.add(layer(activation = swish))
TypeError: __call__() missing 1 required positional argument: 'inputs'
我想知道,因为我尝试过类似的事情,遍历图层并添加到另一个模型,并且它奏效了。此外,当它位于第 20 行时,不应期待任何 'inputs' 或其他什么?
如果有人能在这里提供帮助,那就太好了,谢谢!
edit:我想知道关于 if 语句的问题,询问 class_name,是否有问题?真的希望有人能解决这个问题
custom_vgg.add(layer(activation = swish))
您正在调用一个 layer
对象(这不是创建层,它是调用您从现有模型获得的层)。显然 keras 层是可调用的,layer(...)
是一堆内部逻辑的包装器(那是......我认为不是很好 API)。
无论哪种方式,只是...不要调用图层。