AttributeError: объект 'function' не имеет атрибута 'summary' при построении CNN - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь построить модель CNN. Но я столкнулся с этой ошибкой и не могу ее устранить.

from keras.models import Sequential
from keras.layers import Conv2D,MaxPooling2D,Flatten,Dense
from keras.optimizers import Adam
def vgg():
    kernel=(3,3)
    pool=(2,2)
    model=Sequential()
    model.add(Conv2D(96,kernel,padding='same',input_shape=(32,32,1),activation='relu'))
    model.add(Conv2D(96,kernel,padding='same',activation='relu'))
    model.add(MaxPooling2D(pool,strides=2,padding='same'))

    model.add(Conv2D(128,kernel,padding='same',activation='relu'))
    model.add(Conv2D(128,kernel,padding='same',activation='relu'))
    model.add(MaxPooling2D(pool,strides=2,padding='same'))

    model.add(Conv2D(256,kernel,padding='same',activation='relu'))
    model.add(Conv2D(256,kernel,padding='same',activation='relu'))
    model.add(Conv2D(256,kernel,padding='same',activation='relu'))
    model.add(MaxPooling2D(pool,strides=2,padding='same'))

    model.add(Conv2D(512,kernel,padding='same',activation='relu'))
    model.add(Conv2D(512,kernel,padding='same',activation='relu'))
    model.add(Conv2D(512,kernel,padding='same',activation='relu'))
    model.add(MaxPooling2D(pool,strides=2,padding='same'))

    model.add(Conv2D(512,kernel,padding='same',activation='relu'))
    model.add(Conv2D(512,kernel,padding='same',activation='relu'))
    model.add(Conv2D(512,kernel,padding='same',activation='relu'))
    model.add(MaxPooling2D(pool,strides=2,padding='same'))

    model.add(Flatten())
    model.add(Dense(4096,activation='relu'))
    model.add(Dense(4096,activation='relu'))

    model.add(Dense(43,activation='softmax'))
    model.compile(Adam(lr=0.001),loss='categorical_crossentropy',metrics=['accuracy'])
    return vgg

model=vgg()
print(model.summary())

Я не могу найти решение. Это из-за того, что фильтров больше нет или из-за более высоких значений в плотных, потому что в другой модели я использовал меньшие значения, и они работают нормально

1 Ответ

0 голосов
/ 09 мая 2020

Это супер просто, вам нужно вернуть model, а не саму функцию. Итак, в vgg нужно вернуть model:

def vgg():
    ...
    ...
    return model #not vgg
...