一、问题描述
采用Xshell连接linux服务器,然后调用matplotlib作图,由于没有GUI所以想把图像保存下来,然后下载到本地查看。网上给了有效方案如下:
import matplotlib
matplotlib.use("Agg") #这一句一定要放在下面这句的前面
import matplotlib.pyplot as plt
但是 我按照这个方法写成如下,会报错显示x11转发请求,总之就是不能正常保存图片
import os
import numpy as np
from Config import Config
import net
from keras.utils import to_categorical
from keras.callbacks import ModelCheckpoint, LearningRateScheduler
import mit_utils as utils
import time
from keras.models import load_model
os.environ["TF_CPP_MIN_LOG_LEVEL"] = '2'
os.environ["CUDA_VISIBLE_DEVICES"] = '3'
import tensorflow as tf
from keras.backend.tensorflow_backend import set_session
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
###中间省略N行代码
#*******************************
history = model.fit(x=TrainXt, y=TrainYt, batch_size=modelconfig.batch_size, epochs=3,
verbose=1, validation_data=(ValXt, ValYt), callbacks=callback_lists)
plt.plot(history.history['categorical_accuracy'], marker='.')
plt.plot(history.history['val_categorical_accuracy'], marker='.')
plt.title('model accuracy')
plt.xlabel('epoch')
plt.ylabel('accuracy')
plt.grid()
plt.legend(['categorical_accuracy', 'val_categorical_accuracy'], loc='lower right')
plt.savefig(os.path.join(result_dir, 'model_accuracy.png'))
plt.close()
plt.plot(history.history['loss'], marker='.')
plt.plot(history.history['val_loss'], marker='.')
plt.title('model loss')
plt.xlabel('epoch')
plt.ylabel('loss')
plt.grid()
plt.legend(['loss', 'val_loss'], loc='upper right')
plt.savefig(os.path.join(result_dir, 'model_loss.png'))
plt.close()
然后就会出现如下弹框。。。。
二、解决方案
我试了很多次,最终发现把matplotlib的调用放在最前面就可以了~~~~
像下面这样,不过我不知道什么原理,如果有大佬晓得,请在评论区指点一下呀!
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import os
import numpy as np
from Config import Config
import net
from keras.utils import to_categorical
from keras.callbacks import ModelCheckpoint, LearningRateScheduler
import mit_utils as utils
import time
from keras.models import load_model
os.environ["TF_CPP_MIN_LOG_LEVEL"] = '2'
os.environ["CUDA_VISIBLE_DEVICES"] = '3'
import tensorflow as tf
from keras.backend.tensorflow_backend import set_session