当我尝试修改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'])*
以下是错误消息:
Traceback(最近一次调用最后一次):文件 " C:\ TensorFlow \ Keras \ ResNet-50 \ test_sgd.py",第10行,在 model.compile(loss =' mean_squared_error',optimizer = SGD(lr = 0.01),metrics = ['准确度'])文件 " C:\用户\ nsugiant \应用程序数据\本地\程序\的Python \ Python35 \ lib中\站点包\ tensorflow \蟒\ keras_impl \ keras \ models.py&#34 ;, 第787行,编译中 ** kwargs)文件" C:\ Users \ nsugiant \ AppData \ Local \ Programs \ Python \ Python35 \ lib \ site-packages \ tensorflow \ python \ keras_impl \ keras \ engine \ training.py", 第632行,在编译中 self.optimizer = optimizers.get(optimizer)File" C:\ Users \ nsugiant \ AppData \ Local \ Programs \ Python \ Python35 \ lib \ site-packages \ tensorflow \ python \ keras_impl \ keras \ optimizers.py&# 34 ;, 788行,在得到 引发ValueError('无法解释优化程序标识符:',标识符)ValueError :('无法解释优化程序标识符:', )
答案 0 :(得分:16)
我最近遇到了类似的问题。
原因是您正在为模型和图层使用tensorflow.python.keras api,为SGD使用keras.optimizers。它们是张量流和纯keras的两种不同的keras版本。他们无法一起工作。您必须将所有内容更改为一个版本。然后它应该工作。 :)
希望这有帮助。
答案 1 :(得分:3)
我来晚了,您的问题是您在代码中错过了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']
)
在此示例中,我使用了亚当。请按照上述代码使用相关的优化器。
希望这会有所帮助。
答案 2 :(得分:2)
在一个内核中使用一种样式,请不要混用
from keras.optimizers import sth
使用
from tensorflow.keras.optimizers import sth
答案 3 :(得分:1)
我尝试了以下方法,并且对我有用:
来自keras导入优化器
sgd = Optimizers.SGD(lr = 0.01)
model.compile(loss ='mean_squared_error',Optimizer = sgd)
答案 4 :(得分:1)
在我的情况下,这是因为我错过了括号。我正在使用tensorflow_addons,所以我的代码就像
model.compile(optimizer=tfa.optimizers.LAMB, loss='binary_crossentropy',
metrics=['binary_accuracy'])
它给出了
ValueError: ('Could not interpret optimizer identifier:', <class tensorflow_addons.optimizers.lamb.LAMB'>)
然后我将代码更改为:
model.compile(optimizer=tfa.optimizers.LAMB(), loss='binary_crossentropy',
metrics=['binary_accuracy'])
它有效。
答案 5 :(得分:1)
使用
来自tensorflow.keras导入优化器
代替
来自keras导入优化器
答案 6 :(得分:0)
尝试将导入行更改为
from keras.models import Sequential
from keras.layers import Dense, ...
你的进口对我来说有点奇怪。也许你可以详细说明一下。
答案 7 :(得分:0)
只要给
<form action="/term/{{$term->id}}/deleteLevel" method="POST" >
{{ csrf_field() }}
@foreach($term->level as $levels>
<input type="checkbox" name="level_id[]" value="{{ $levels->id }}">
{{ $levels->levelname }}
@endforeach
<button type="submit">Delete</button>
</form>
答案 8 :(得分:0)
运行Keras文档示例https://keras.io/examples/cifar10_cnn/ 并安装最新的keras和张量流版本
(在撰写本文时 tensorflow 2.0.0a0和Keras版本2.2.4)
我必须明确导入示例所使用的keras的优化程序,特别是示例顶部的行:
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“ broke”和keras.stuff成为tensorflow.keras.stuff。
答案 9 :(得分:0)
此问题主要是由于版本不同引起的。 tensorflow.keras版本可能与keras不同。 从而导致@Priyanka提到的错误。
对我来说,每当出现此错误时,我都会以字符串的形式传入优化器的名称,然后后端将其找出来。 例如,代替
tf.keras.optimizers.Adam
或
keras.optimizers.Adam
我愿意
model.compile(optimizer= 'adam' , loss= keras.losses.binary_crossentropy, metrics=['accuracy'])
答案 10 :(得分:0)
对于某些库(例如keras_radam
),您需要在导入之前设置环境变量:
import os
os.environ['TF_KERAS'] = '1'
import tensorflow
import your_library
答案 11 :(得分:0)
List<String> mData
这很好。
答案 12 :(得分:0)
我放错了括号并得到了这个错误,
最初是
<table cellspacing="2" cellpadding="2">
<tr>
<td class="data_yy">
<input type="radio" name="jack" id="jack" value="Y" onclick="hideShowJacks('Y');"/><label>Yes</label>
<input type="radio" name="jack" id="jack" value="N" checked onclick="hideShowJacks('N');"/><label>No</label>
</td>
<td class="data_xx"> Are are taking English class in fall?</td>
</tr>
<tr>
<td>
<textarea cols="120" rows="5" maxLenghth="20" class="resizable" name="jack" id="jack"> </textarea>
<div class="plaintext" style="justify:left" id="jack"> </div>
</td>
</tr>
</table>
更正的版本是
x=Conv2D(filters[0],(3,3),use_bias=False,padding="same",kernel_regularizer=l2(reg),x))
答案 13 :(得分:0)
我收到相同的错误消息,并通过替换优化程序的分配解决了此问题:
optimizer=keras.optimizers.Adam
及其实例而不是类本身:
optimizer=keras.optimizers.Adam()
答案 14 :(得分:0)
我尝试了此线程中的所有方法来修复它,但它们没有奏效。但是,我设法为我修复了它。对我来说,问题是调用优化器类,即。 tensorflow.keras.optimizers.Adam
导致错误,但将优化器作为函数调用,即。 tensorflow.keras.optimizers.Adam()
有效。所以我的代码看起来像:
model.compile(
loss=tensorflow.keras.losses.categorical_crossentropy(),
optimizer=tensorflow.keras.optimizers.Adam()
)
看tensorflow github,I am not the only one with this error where calling the function rather than the class fixed the error.
答案 15 :(得分:0)
最近,在 Keras API 2.5.0 的最新更新中,导入 Adam 优化器显示以下错误:
from keras.optimizers import Adam
ImportError: cannot import name 'Adam' from 'keras.optimizers'
改为使用以下导入优化器(即 Adam):
from keras.optimizers import adam_v2
optimizer = adam_v2.Adam(learning_rate=lr, decay=lr/epochs)
Model.compile(loss='--', optimizer=optimizer , metrics=['--'])