"无法解释优化程序标识符" Keras的错误

时间:2018-04-27 06:15:03

标签: python python-3.x tensorflow keras

当我尝试修改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 :('无法解释优化程序标识符:',   )

16 个答案:

答案 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">&nbsp;</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=['--'])