Python &引用;无法解释优化器标识符“;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

当我试图在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.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()
)