You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建CNN模型时遇AttributeError:'function'对象无'summary'属性求助

解决AttributeError: 'function' object has no attribute 'summary'错误

嘿,我一眼就揪出问题所在了——你在vgg()函数里犯了个超容易忽略的小失误!

你看函数最后一行写的是return vgg,这意味着你返回的是函数本身,而不是你花功夫构建好的model对象。当你执行model = vgg()时,model变量其实指向的是这个函数,而非Keras模型实例,自然就没有summary()方法啦,这才是报错的根本原因。

和你怀疑的滤波器数量、全连接层单元数完全没关系哦,那些参数只会影响模型的训练速度或内存占用,不会触发这个属性错误。

来看看修复后的完整代码:

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 model  # 这里改成返回model对象!

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

只需要把函数最后一行的return vgg改成return model,就能解决这个问题啦。

另外,如果你之后真遇到模型参数过多导致的内存不足问题,可以试试这些小技巧:

  • 减少卷积层的滤波器数量,比如把96改成64、512改成256
  • 缩小全连接层的单元数,比如把4096改成1024
  • 启用混合精度训练来降低内存占用

内容的提问来源于stack exchange,提问作者Harshit Bargali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 15:47:26