首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keras KeyError:‘度量’行--执行model.fit()时> 13 callbacks=callbacks

Keras KeyError:‘度量’行--执行model.fit()时> 13 callbacks=callbacks
EN

Stack Overflow用户
提问于 2020-06-02 22:26:16
回答 3查看 3.4K关注 0票数 0

当我偶然发现这个问题时,我正在古瑟拉尝试这门课程。每当我试图运行model.fit()时,它都会显示此错误。

显示的错误:

代码语言:javascript
复制
KeyError                                  Traceback (most recent call last)

<ipython-input-83-0ef54ef3afb9> in <module>()
     11     validation_steps = len(x_val) // batch_size,
     12     epochs=12,
---> 13     callbacks=callbacks
     14 )

3 frames

/usr/local/lib/python3.6/dist-packages/livelossplot/generic_keras.py in on_train_begin(self, logs)
     29 
     30     def on_train_begin(self, logs={}):
---> 31         self.liveplot.set_metrics([metric for metric in self.params['metrics'] if not metric.startswith('val_')])
     32 
     33         # slightly convolved due to model.complie(loss=...) stuff

KeyError: 'metrics'

这里是我的实际代码:

代码语言:javascript
复制
from tensorflow.keras.layers import Dense, Input, Dropout,Flatten, Conv2D
from tensorflow.keras.layers import BatchNormalization, Activation, MaxPooling2D

from tensorflow.keras.models import Model, Sequential
from tensorflow.keras.optimizers import Adam, SGD
from tensorflow.keras.callbacks import ModelCheckpoint

初始化CNN

代码语言:javascript
复制
model = Sequential()

第一卷积

代码语言:javascript
复制
model.add(Conv2D(32,(5,5), padding='same', input_shape=(64, 128, 1)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))

第二卷积层

代码语言:javascript
复制
model.add(Conv2D(64, (5,5), padding='same'))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))

压平

代码语言:javascript
复制
model.add(Flatten())

全连通层

代码语言:javascript
复制
model.add(Dense(1024))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.4))

model.add(Dense(4, activation='softmax'))

学习速率调度与模型编译

代码语言:javascript
复制
initial_learning_rate=0.005
lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
    initial_learning_rate = initial_learning_rate,
    decay_steps=5,
    decay_rate=0.96,
    staircase=True
)
optimizer = Adam(learning_rate=lr_schedule)

model.compile(loss='categorical_crossentropy', optimizer=optimizer , metrics=["accuracy"])
model.summary()

训练模型

代码语言:javascript
复制
checkpoint = ModelCheckpoint('model_weight.h5', monitor='val_loss', 
                             save_weights_only=True, mode='min', verbose=0)
callbacks=[PlotLossesCallback(), checkpoint]

batch_size=32

history = model.fit(
    datagen_train.flow(x_train, y_train, batch_size=batch_size, shuffle=True),
    steps_per_epoch = len(x_train) // batch_size,
    validation_data = datagen_val.flow(x_val, y_val, batch_size=batch_size, shuffle=True),
    validation_steps = len(x_val) // batch_size,
    epochs=12,
    callbacks=callbacks
)

我怎么解决这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-10-23 21:09:26

尝试更改导入语句

代码语言:javascript
复制
from livelossplot.tf_keras import PlotLossesCallback

代码语言:javascript
复制
from livelossplot.inputs.tf_keras import PlotLossesCallback
票数 2
EN

Stack Overflow用户

发布于 2020-07-07 18:10:34

livelossplot.tf_keras将不能在Tensorflow版本2.1+中工作,将TensorFlow版本从2.2降级为使用pip install tensorflow==2.1的Tensorflow 2.1,它将工作并绘制模型培训图。

票数 2
EN

Stack Overflow用户

发布于 2020-08-28 02:43:58

您必须更新livelossplot以使用tensorflow 2.x版本。在工作的最新API中有一些重大变化。不要使用tf_keras,而是使用PlotLossesKeras

代码语言:javascript
复制
from livelossplot import PlotLossesKeras

model.fit(X_train, Y_train,
          epochs=10,
          validation_data=(X_test, Y_test),
          callbacks=[PlotLossesKeras()],
          verbose=0)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62162343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档