Ваш график пуст, потому что вы тренировались только одну эпоху. Но это не самое худшее из твоих проблем. Вы пытаетесь построить график скорости эпохи (которая является постоянной величиной) против точности проверки эпохи. Как вы ожидаете, что это будет выглядеть, если значение скорости обучения является постоянным?
Что вам нужно сделать, это взять значение скорости обучения, которое вы используете для некоторого моделирования, и построить его график в зависимости от наивысшего значения точности, которого вы смогли достичь во время конкретного моделирования. Например, вы тренируетесь 3 раза, используя разные скорости обучения, и затем вы выводите максимальные значения точности в зависимости от скорости обучения следующим образом:
import matplotlib.pyplot as plt
%matplotlib inline
lrs = [history1.history['lr'][0],
history2.history['lr'][0],
history3.history['lr'][0]]
vals = [max(history1.history['val_acc']),
max(history2.history['val_acc']),
max(history3.history['val_acc'])]
lrs, vals = zip(*sorted(zip(lrs, vals)))
lrs, vals = list(lrs), list(vals)
plt.plot(lrs, vals)
plt.title('Plot of overall accuracy to larning rate for SGD optimizer')
plt.ylabel('Max Accuracy')
plt.xlabel('Learning Rate')
plt.show()
Что приведет к чему-то вроде этого:

Вот пример того, как вы должны определить эти симуляции:
opt1 = SGD(lr=0.001)
opt2 = SGD(lr=0.01)
opt3 = SGD(lr=0.1)
reduce_lr = ReduceLROnPlateau(monitor='val_acc', factor=0.9, patience=25, min_lr=0.000001, verbose=1)
model2 = tf.keras.models.clone_model(model) # <--copy model
model3 = tf.keras.models.clone_model(model)
model.compile(optimizer=opt1, loss="categorical_crossentropy", metrics=["accuracy"])
history1 = model.fit(x=x_train,
y=y_train,
batch_size=10,
epochs=10,
verbose=1,
callbacks=[reduce_lr],
validation_data=(x_val,y_val),
shuffle=True)
model2.compile(optimizer=opt2, loss="categorical_crossentropy", metrics=["accuracy"])
history2 = model2.fit(x=x_train,
y=y_train,
batch_size=10,
epochs=10,
verbose=1,
callbacks=[reduce_lr],
validation_data=(x_val,y_val),
shuffle=True)
model3.compile(optimizer=opt3, loss="categorical_crossentropy", metrics=["accuracy"])
history3 = model3.fit(x=x_train,
y=y_train,
batch_size=10,
epochs=10,
verbose=1,
callbacks=[reduce_lr],
validation_data=(x_val,y_val),
shuffle=True)