首页 > 解决方案 > 使用 matlibplot 函数时 Python 不显示绘图

问题描述

我在 Anaconda 中运行此代码,它运行完美,直到我到达该行plt.show(),然后图形窗口将打开大约 5 秒钟,然后自动关闭,然后它将从 Python 退出,我将不得不使用ipython它再次打开它. 没有错误。

我已经尝试了所有可以在网上找到的东西,但还没有任何效果。

我已经列出了下面的代码。

#suppress unwanted warnings
from os import environ
def suppress_qt_warnings():
    environ["QT_DEVICE_PIXEL_RATIO"] = "0"
    environ["QT_AUTO_SCREEN_SCALE_FACTOR"] = "1"
    environ["QT_SCREEN_SCALE_FACTORS"] = "1"
    environ["QT_SCALE_FACTOR"] = "1"

if __name__ == "__main__":
    suppress_qt_warnings()

#import relevant libraries
import tensorflow
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D
from tensorflow.keras import backend as K
from tensorflow.keras.callbacks import EarlyStopping

#import libraries to allow us to plot graphs
import numpy as np
import pandas as pd
%matplotlib qt
import matplotlib
matplotlib.get_backend()
import matplotlib.pyplot as plt

epochs=6

#load the dataset
mnist=tensorflow.keras.datasets.mnist

#normalise dataset to values between 0 and 1
(x_train, y_train), (x_test,y_test) = mnist.load_data()
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train, x_test = x_train/255, x_test/255

#each image in dataset is 28x28 pixels
img_rows, img_cols = 28, 28

#reshape input_shape for modelling
if K.image_data_format() == 'channels_first':
    x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
    x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
    input_shape = (1, img_rows, img_cols)
else:
    x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
    x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
    input_shape = (img_rows, img_cols, 1)

#model CNN
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(layers.Dense(10))

#initialise optimiser and loss
optim = tensorflow.keras.optimizers.RMSprop(lr=0.001)
loss = tensorflow.keras.losses.SparseCategoricalCrossentropy(from_logits=True),

#compile model
model.compile(optimizer=optim, loss=loss, metrics=['accuracy'])

#early stopping
es = EarlyStopping(monitor='loss', mode='min', verbose=1)
 
#run training model
history=model.fit(x_train, y_train, batch_size=64, epochs=epochs,shuffle=True, verbose =1, callbacks=[es])

#run testing model
model.evaluate(x_test, y_test,batch_size=64, verbose=1)

#plot training accuracy value
epoch_range = range(1, epochs+1)
plt.plot(epoch_range, history.history['accuracy'])
plt.title('Model Accuracy')
plt.ylabel('Accuracy')
plt.xlabel('Epoch')
plt.legend(['Train','Test'], loc='upper left')
plt.show()

#plot training loss value
plt.plot(epoch_range, history.history['loss'])
plt.title('Model Loss')
plt.ylabel('Loss')
plt.xlabel('Epoch')
plt.legend(['Train','Test'], loc='upper left')
plt.show()

标签: pythonmatplotlibconv-neural-network

解决方案


推荐阅读