Neh*_*mia 19 python python-3.x keras tensorflow
当我尝试修改Keras中SGD优化器的学习速率参数时出现此错误.我的代码中是否遗漏了某些内容,或者我的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'])*
Run Code Online (Sandbox Code Playgroud)
这是错误信息:
回溯(最近一次调用最后一次):文件"C:\ TensorFlow\Keras\ResNet-50\test_sgd.py",第10行,在model.compile中(loss ='mean_squared_error',optimizer = SGD(lr = 0.01),metrics = ['accuracy'])文件"C:\ Users \nsugiant\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\keras_impl\keras\models.py",第787行,在编译中**kwargs)文件"C:\ Users \nsugiant\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\keras_impl\keras\engine\training.py",第632行,编译自我.optimizer = optimizers.get(optimizer)文件"C:\ Users \nsugiant\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\keras_impl\keras\optimizers.py",第788行, in get raise ValueError('无法解释优化器标识符:',标识符)ValueError:('无法解释优化程序标识符:',)
Pri*_*ary 29
我最近遇到了类似的问题.
原因是你正在为模型和层使用tensorflow.python.keras api,为SGD使用keras.optimizers.它们是张量流和纯keras的两种不同的keras版本.他们无法一起工作.您必须将所有内容更改为一个版本.然后它应该工作.:)
希望这可以帮助.
Sac*_*mar 10
这个问题主要是由于版本不同造成的。tensorflow.keras 版本可能与 keras 不同。从而导致@Priyanka 提到的错误。
对我来说,每当出现此错误时,我都会将优化器的名称作为字符串传入,然后后端会计算出来。例如代替
tf.keras.optimizers.Adam
Run Code Online (Sandbox Code Playgroud)
或者
keras.optimizers.Adam
Run Code Online (Sandbox Code Playgroud)
我愿意
model.compile(optimizer= 'adam' , loss= keras.losses.binary_crossentropy, metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)
小智 6
我在这里有点晚了,您的问题是您在代码中混合了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']
)
Run Code Online (Sandbox Code Playgroud)
在此示例中,我使用了亚当。请按照上述代码使用相关的优化器。
希望这可以帮助。
对于某些库(例如keras_radam),您需要在导入之前设置环境变量:
import os
os.environ['TF_KERAS'] = '1'
import tensorflow
import your_library
Run Code Online (Sandbox Code Playgroud)
小智 5
from tensorflow.keras.optimizers import SGD
Run Code Online (Sandbox Code Playgroud)
这很好用。
从 Tensorflow 2.0 开始,有一个新的 API 可以直接通过tensorflow:
解决方案适用于tensorflow==2.2.0rc2,Keras==2.2.4(在 Win10 上)
另请注意,上面的版本learning_rate用作参数而不是lr。
就我而言,这是因为我错过了括号。我正在使用 tensorflow_addons 所以我的代码就像
model.compile(optimizer=tfa.optimizers.LAMB, loss='binary_crossentropy',
metrics=['binary_accuracy'])
Run Code Online (Sandbox Code Playgroud)
它给出了
ValueError: ('Could not interpret optimizer identifier:', <class tensorflow_addons.optimizers.lamb.LAMB'>)
然后我将代码更改为:
model.compile(optimizer=tfa.optimizers.LAMB(), loss='binary_crossentropy',
metrics=['binary_accuracy'])
Run Code Online (Sandbox Code Playgroud)
它有效。
小智 5
最近,在 Keras API 2.5.0 最新更新中,导入 Adam 优化器出现以下错误:
from keras.optimizers import Adam
ImportError: cannot import name 'Adam' from 'keras.optimizers'
Run Code Online (Sandbox Code Playgroud)
而是使用以下内容来导入优化器(即 Adam):
from keras.optimizers import adam_v2
optimizer = adam_v2.Adam(learning_rate=lr, decay=lr/epochs)
Model.compile(loss='--', optimizer=optimizer , metrics=['--'])
Run Code Online (Sandbox Code Playgroud)
尝试将导入行更改为
from keras.models import Sequential
from keras.layers import Dense, ...
Run Code Online (Sandbox Code Playgroud)
你的进口对我来说有点奇怪。也许你可以详细说明这一点。