TensorFlow Keras调用l2正则化提示'l2'未定义错误求助
错误原因
- 命名空间导入不匹配:你仅导入了
tensorflow.keras.regularizers父模块,l2是该模块下的内置方法,没有单独导入到当前工作空间的前提下,无法直接调用l2()执行。 - 代码存在两处笔误:
- 正则化参数名拼写错误:正确参数名为
kernel_regularizer,你写的kernal_regularizer拼写错误会导致正则化不生效 - 优化器
sgd未导入:修复l2报错后,后续会继续抛出NameError: name 'sgd' is not defined的错误
- 正则化参数名拼写错误:正确参数名为
修复方案
你可以任选以下一种方式修复l2未定义的问题:
方案1:保留现有导入语句,调用时指定父模块
将Dense层参数里的l2(0.01)改为regularizers.l2(0.01),同时修正参数拼写即可。
方案2:单独导入l2方法
在现有导入代码中新增一行:
from tensorflow.keras.regularizers import l2
完成上面的修改后,还需要修复优化器的导入问题,同样可以二选一操作:
- 全路径调用:将compile里的
sgd改为tensorflow.keras.optimizers.SGD(learning_rate=0.01)(可根据需求调整学习率参数) - 单独导入:新增导入语句
from tensorflow.keras.optimizers import SGD,将compile里的sgd改为SGD(learning_rate=0.01)
修复后完整可运行代码
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense from tensorflow.keras.optimizers import SGD from tensorflow.keras.regularizers import l2 model = Sequential() model.add(Dense(units=10, input_shape=[784], activation='sigmoid', kernel_regularizer=l2(0.01))) model.compile(optimizer=SGD(learning_rate=0.01), loss='categorical_crossentropy', metrics=['accuracy']) model.summary() model.fit(x_train, y_train, batch_size = 256, epochs=100, validation_data=(x_test, y_test))
内容的提问来源于stack exchange,提问作者taylor
相关产品推荐
相关产品推荐

