Python &引用;无法解释优化器标识符“;Keras中的错误
当我试图在Keras中修改SGD optimizer的学习率参数时,我遇到了这个错误。我是否在代码中遗漏了什么,或者我的Keras安装不正确 这是我的密码:Python &引用;无法解释优化器标识符“;Keras中的错误,python,python-3.x,tensorflow,keras,Python,Python 3.x,Tensorflow,Keras,当我试图在Keras中修改SGD optimizer的学习率参数时,我遇到了这个错误。我是否在代码中遗漏了什么,或者我的Keras安装不正确 这是我的密码: from tensorflow.python.keras.models import Sequential from tensorflow.python.keras.layers import Dense, Flatten, GlobalAveragePooling2D, Activation import keras from keras
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense, Flatten, GlobalAveragePooling2D, Activation
import keras
from keras.optimizers import SGD
model = Sequential()
model.add(Dense(64, kernel_initializer='uniform', input_shape=(10,)))
model.add(Activation('softmax'))
model.compile(loss='mean_squared_error', optimizer=SGD(lr=0.01), metrics= ['accuracy'])*
下面是错误消息:
回溯(最近一次调用上次):文件
“C:\TensorFlow\Keras\ResNet-50\test\u sgd.py”,第10行
编译(loss='mean\u squared\u error',optimizer=SGD(lr=0.01),metrics=['accurity'])文件
“C:\Users\nsugiant\AppData\Local\Programs\Python\Python35\lib\site packages\tensorflow\Python\keras\u impl\keras\models.py”,
第787行,在编译中
**kwargs)文件“C:\Users\nsugiant\AppData\Local\Programs\Python\Python35\lib\site packages\tensorflow\Python\keras\u impl\keras\engine\training.py”,
第632行,在编译中
self.optimizer=optimizers.get(优化器)文件“C:\Users\nsugant\AppData\Local\Programs\Python\Python35\lib\site packages\tensorflow\Python\keras\u impl\keras\optimizers.py”,
第788行,在get中
raise VALUERROR('无法解释优化器标识符:',标识符)VALUERROR:('无法解释优化器标识符:',
)
尝试将导入行更改为
from keras.models import Sequential
from keras.layers import Dense, ...
我觉得你的进口产品有点奇怪。也许你可以详细说明一下 我最近遇到了类似的问题 原因是您将tensorflow.python.keras api用于模型和层,将keras.optimizers用于SGD。它们是tensorflow和纯keras的两个不同keras版本。他们不能一起工作。您必须将所有内容更改为一个版本。那么它应该会起作用。:) 希望这对你有所帮助。给我一点吧
optimizer = 'sgd' / 'RMSprop'
我来晚了一点,你的问题是你的代码中混合了Tensorflow keras和keras API。优化器和模型应该来自同一层定义。使用Keras API实现以下所有功能:
from keras.models import Sequential
from keras.layers import Dense, Dropout, LSTM, BatchNormalization
from keras.callbacks import TensorBoard
from keras.callbacks import ModelCheckpoint
from keras.optimizers import adam
# Set Model
model = Sequential()
model.add(LSTM(128, input_shape=(train_x.shape[1:]), return_sequences=True))
model.add(Dropout(0.2))
model.add(BatchNormalization())
# Set Optimizer
opt = adam(lr=0.001, decay=1e-6)
# Compile model
model.compile(
loss='sparse_categorical_crossentropy',
optimizer=opt,
metrics=['accuracy']
)
我在这个例子中使用了亚当。请按照上述代码使用相关优化器
希望这有帮助。运行Keras文档示例 以及安装最新的keras和tensor flow版本 (在撰写本文时 tensorflow 2.0.0a0和Keras版本2.2.4) 我必须显式导入示例所使用的优化程序,特别是示例顶部的行:
opt = tensorflow.keras.optimizers.rmsprop(lr=0.0001, decay=1e-6)
被替换为
from tensorflow.keras.optimizers import RMSprop
opt = RMSprop(lr=0.0001, decay=1e-6)
在最新版本中,api“坏了”和keras.stuff在很多情况下变成了tensorflow.keras.stuff。这个问题主要是由不同版本引起的。tensorflow.keras版本可能与keras版本不同。 从而导致@Priyanka提到的错误 对我来说,每当出现此错误时,我都将优化器的名称作为字符串传递给后端,由后端计算出来。 例如,而不是
tf.keras.optimizers.Adam
或
我知道
对于某些库(例如,keras_radam
),您需要在导入之前设置环境变量:
import os
os.environ['TF_KERAS'] = '1'
import tensorflow
import your_library
这很有效
自Tensorflow 2.0以来,有一个新的API可通过Tensorflow
直接获得:
tensorflow==2.2.0rc2
,Keras==2.2.4
(在Win10上)
还请注意,上面的版本使用
学习率
作为参数,不再使用lr
我尝试了以下方法,它对我有效:
来自keras导入优化器
sgd=optimizers.sgd(lr=0.01)
compile(loss='mean\u squared\u error',optimizer=sgd)在我的例子中,这是因为我遗漏了括号。我使用tensorflow_插件,所以我的代码是
model.compile(optimizer=tfa.optimizers.LAMB, loss='binary_crossentropy',
metrics=['binary_accuracy'])
它给
ValueError:(“无法解释优化器标识符:”,使用
从tensorflow.keras导入优化器
而不是
tf.keras.optimizers.Adam
来自keras导入优化器
我把括号放错地方了,出现了这个错误
起初是这样
x=Conv2D(filters[0],(3,3),use_bias=False,padding="same",kernel_regularizer=l2(reg),x))
更正的版本是
x=Conv2D(filters[0],(3,3),use_bias=False,padding="same",kernel_regularizer=l2(reg))(x)
我收到了相同的错误消息,并通过替换优化器的分配解决了此问题:
optimizer=keras.optimizers.Adam
使用其实例而不是类本身:
optimizer=keras.optimizers.Adam()
在一个内核中使用一种风格,尽量不要混用
从keras.optimizers导入sth
与
从tensorflow.keras.optimizers导入某个东西
我尝试了这个线程中的所有方法来修复它,但都没有成功。但是,我成功地为自己修复了它。对我来说,问题是调用优化器类,即tensorflow.keras.optimizers.Adam
导致了错误,但将优化器作为函数调用,即tensorflow.keras.optimizers.Adam()
工作正常。因此,我的代码如下所示:
model.compile(
loss=tensorflow.keras.losses.categorical_crossentropy(),
optimizer=tensorflow.keras.optimizers.Adam()
)
看看tensorflow github,欢迎使用Stack Overflow!你能解释一下为什么你认为这会解决问题中提到的问题吗?欢迎使用Stack Overflow!虽然这段代码可能会解决问题,但如何以及为什么这会真正有助于提高你的文章质量,一个d可能会导致更多的赞成票。请记住,你是在为将来的读者回答这个问题,而不仅仅是现在的提问者。请你的回答添加解释,并指出适用的限制和假设。是的,你可以将优化器的字符串名称作为优化器参数的值传递,但使用tf.keras.ooptimizers.Adam函数在您想要调整优化器设置(例如学习速率)时更灵活。只需添加一点,在当前TF版本(2.4.1)中,优化器必须作为函数而不是参数调用。因此确切的代码将是“TF.keras.optimizers.Adam()那么,我如何用这种语法添加lr呢?我在下面尝试过,但它在model.compile(optimizer='adam'(lr=0.0001);loss=keras.loss.binary_crossentropy,metrics=['accurity'])中不起作用,你应该给出一个有效的解决方案
optimizer=keras.optimizers.Adam
optimizer=keras.optimizers.Adam()
model.compile(
loss=tensorflow.keras.losses.categorical_crossentropy(),
optimizer=tensorflow.keras.optimizers.Adam()
)