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

Keras搭建CNN分类模型时报错缺少'units'参数如何解决

错误原因

你当前使用的Keras版本为2.0及以上版本,全连接层Dense的API已经调整,旧版本中用来指定输出维度的output_dim参数已被废弃,替换为必填的位置参数units,因此传入output_dim会被识别为未提供必填参数。

修复步骤

  1. 替换代码中所有Dense层的output_dim参数为units:

    • 原报错行classifier.add(Dense(output_dim = 128, activation = 'relu'))修改为:
      classifier.add(Dense(units = 128, activation = 'relu'))
      
    • 下一行输出层的classifier.add(Dense(output_dim = 1, activation = 'sigmoid'))同步修改为:
      classifier.add(Dense(units = 1, activation = 'sigmoid'))
      
  2. (可选预修复)你代码中Convolution2D层的参数写法也不符合新版本Keras的API规范,后续运行仍会报错,需要把卷积核尺寸参数用元组包裹,修改方式如下:

    • 原第一层卷积classifier.add(Convolution2D(32, 3, 3, input_shape = (64, 64, 3), activation = 'relu'))改为:
      classifier.add(Convolution2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))
      
    • 第二层卷积classifier.add(Convolution2D(32, 3, 3, activation = 'relu'))改为:
      classifier.add(Convolution2D(32, (3, 3), activation = 'relu'))
      

修改后完整代码段

from keras.models import Sequential
from keras.layers import Convolution2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense


classifier = Sequential()

# 卷积层
classifier.add(Convolution2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))

# 池化层
classifier.add(MaxPooling2D(pool_size = (2, 2)))

# 第二层卷积
classifier.add(Convolution2D(32, (3, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))

# 展平层
classifier.add(Flatten())

# 全连接层
classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dense(units = 1, activation = 'sigmoid'))

# 模型编译
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:45:01