почему он говорит это: «TypeError: __call __ () отсутствует 1 обязательный позиционный аргумент:« входы »» - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь создать собственную vgg-подобную модель с функцией dropout и swi sh. Я совершенно не понимаю, в чем здесь проблема. Я новичок, поэтому, возможно, я совершенно не прав. Я бы так не думал, поскольку я go на примере учебных пособий и руководств.

Вот код:

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, он не должен ожидать каких-либо «вводов» или чего-то еще?

, если кто-то может помочь здесь, это было бы здорово, спасибо!

edit: я интересно, если дело с оператором if, спрашивая о class_name, может быть, это как-то не так? очень надеюсь, что кто-то может решить это

1 Ответ

1 голос
/ 25 февраля 2020
custom_vgg.add(layer(activation = swish))

Вы вызываете layer объект (это не создание слоя, это вызов слоя, полученного из существующей модели). И, очевидно, слои keras могут вызываться, layer(...) - это обертка вокруг множества внутренних логи c (это ... не очень хороший API, я думаю).

В любом случае, просто ... Дон не вызывать слой.

...