如何修复Keras优化器报错:ValueError: decay is deprecated
解决方案
方法一:修改canaro源码中的优化器配置
- 定位canaro的安装路径
在Kaggle Notebook中运行以下命令查看canaro的安装位置:
!pip show canaro
输出里的Location字段就是安装目录,比如/opt/conda/lib/python3.10/site-packages/canaro
- 打开models.py文件编辑
运行以下命令打开模型定义文件(替换为你的实际路径):
%edit /opt/conda/lib/python3.10/site-packages/canaro/models.py
- 找到createSimpsonsModel函数中的优化器代码
在函数内部找到创建SGD优化器的代码块,通常类似:
optimizer = tf.keras.optimizers.SGD( learning_rate=learning_rate, momentum=momentum, decay=decay, nesterov=nesterov )
- 修改优化器配置(二选一)
- 选项A:使用legacy版本的SGD(兼容旧的decay参数)
将优化器替换为legacy版本:
optimizer = tf.keras.optimizers.legacy.SGD( learning_rate=learning_rate, momentum=momentum, decay=decay, nesterov=nesterov )
- 选项B:适配新Keras的weight_decay参数
将decay参数替换为新的weight_decay:
optimizer = tf.keras.optimizers.SGD( learning_rate=learning_rate, momentum=momentum, weight_decay=decay, nesterov=nesterov )
- 保存修改并重启内核
修改完成后保存文件,然后重启Kaggle Notebook的内核,重新导入canaro模块即可生效。
方法二:自定义模型函数(无需修改第三方源码)
如果你不想修改canaro的源码,可以直接复制createSimpsonsModel的完整代码到自己的Notebook中,修改其中的优化器部分,然后调用自定义函数创建模型:
import tensorflow as tf from tensorflow.keras import layers, models def custom_createSimpsonsModel(IMG_SIZE, channels, output_dim, loss='binary_crossentropy', decay=1e-6, learning_rate=0.001, momentum=0.9, nesterov=True): # 复制原createSimpsonsModel的网络结构代码 model = models.Sequential() # 原模型的卷积层、池化层等结构(直接复制源码中的对应部分) model.add(layers.Conv2D(32, (3,3), activation='relu', input_shape=(IMG_SIZE, IMG_SIZE, channels))) model.add(layers.MaxPooling2D((2,2))) model.add(layers.Conv2D(64, (3,3), activation='relu')) model.add(layers.MaxPooling2D((2,2))) model.add(layers.Conv2D(128, (3,3), activation='relu')) model.add(layers.MaxPooling2D((2,2))) model.add(layers.Flatten()) model.add(layers.Dense(512, activation='relu')) model.add(layers.Dropout(0.5)) model.add(layers.Dense(output_dim, activation='softmax')) # 修改优化器部分 optimizer = tf.keras.optimizers.legacy.SGD( learning_rate=learning_rate, momentum=momentum, decay=decay, nesterov=nesterov ) model.compile(optimizer=optimizer, loss=loss, metrics=['accuracy']) return model # 调用自定义函数创建模型 model = custom_createSimpsonsModel( IMG_SIZE=IMG_SIZE, channels=channel, output_dim=len(characters), loss='binary_crossentropy', decay=1e-6, learning_rate=0.001, momentum=0.9, nesterov=True )
内容的提问来源于stack exchange,提问作者Sneha rayudu
相关产品推荐
相关产品推荐

