Keras搭建CNN分类模型时报错缺少'units'参数如何解决
错误原因
你当前使用的Keras版本为2.0及以上版本,全连接层Dense的API已经调整,旧版本中用来指定输出维度的output_dim参数已被废弃,替换为必填的位置参数units,因此传入output_dim会被识别为未提供必填参数。
修复步骤
替换代码中所有
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'))
- 原报错行
(可选预修复)你代码中
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
相关产品推荐
相关产品推荐

