我在Coursera上学习这个课程时遇到了这个问题。每当我尝试运行 model.fit() 时,就会显示这个错误。
显示的错误:
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=...) stuffKeyError: 'metrics'
这是我的实际代码:
from tensorflow.keras.layers import Dense, Input, Dropout,Flatten, Conv2Dfrom tensorflow.keras.layers import BatchNormalization, Activation, MaxPooling2Dfrom tensorflow.keras.models import Model, Sequentialfrom tensorflow.keras.optimizers import Adam, SGDfrom tensorflow.keras.callbacks import ModelCheckpoint
初始化CNN
model = Sequential()
第一次卷积
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))
第二次卷积层
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))
扁平化
model.add(Flatten())
全连接层
model.add(Dense(1024))model.add(BatchNormalization())model.add(Activation('relu'))model.add(Dropout(0.4))model.add(Dense(4, activation='softmax'))
学习率调度和编译模型
initial_learning_rate=0.005lr_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()
训练模型
checkpoint = ModelCheckpoint('model_weight.h5', monitor='val_loss', save_weights_only=True, mode='min', verbose=0)callbacks=[PlotLossesCallback(), checkpoint]batch_size=32history = 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)
如何解决这个问题?
回答:
尝试更改你的导入语句
from livelossplot.tf_keras import PlotLossesCallback
改为
from livelossplot.inputs.tf_keras import PlotLossesCallback