TensorFlow构建草莓图像分类器报错Unknown activation function: heaviside
问题原因
报错核心是TensorFlow Keras的内置激活函数库中不存在名为heaviside的激活函数,你在输出层错误指定了不存在的激活函数才触发该报错。
修复方案
你做的是健康/不健康草莓的二分类任务,直接按以下修改代码即可运行:
- 修改输出层的激活函数
找到vgg_build_model函数里的这行代码:
m.add(layers.Dense(2, activation='heaviside'))
替换为以下内容:
因为你用的是binary_crossentropy损失,且数据生成器指定的是class_mode='binary',更匹配的写法是输出1个神经元,用sigmoid激活:
m.add(layers.Dense(1, activation='sigmoid'))
如果要保留输出2个神经元的写法,需要把激活改成softmax,同时把损失函数换成sparse_categorical_crossentropy,对新手来说第一种改法更简单不容易出错。
- 附加优化(可选,避免后续训练效果差)
你现在写的if layer.name == 'block_conv1'是错误的,VGG16的卷积层命名格式是blockX_convY,比如block5_conv1,如果你想微调最后一个卷积块的参数,可以改成:
if layer.name == 'block5_conv1':
如果不需要微调,直接全冻结卷积基也可以,新手初期先保证代码能跑通再调整训练效果即可。
修改完成后重新运行代码,就不会再报激活函数不存在的错误,模型可以正常开始训练。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

