【python】matplotlib动态显示详解

1.matplotlib动态绘图

python在绘图的时候,需要开启 interactive mode。核心代码如下:

plt.ion(); #开启interactive mode 成功的关键函数
  fig = plt.figure(1);

  for i in range(100):
    filepath="E:/Model/weights-improvement-" + str(i + 1) + ".hdf5";
    model.load_weights(filepath);
    #测试数据
    x_new = np.linspace(low, up, 1000);
    y_new = getfit(model,x_new);
    # 显示数据
    plt.clf();
    plt.plot(x,y);
    plt.scatter(x_sample, y_sample);
    plt.plot(x_new,y_new);

    ffpath = "E:/imgs/" + str(i) + ".jpg";
    plt.savefig(ffpath);

    plt.pause(0.01)       # 暂停0.01秒

  ani = animation.FuncAnimation(plt.figure(2), update,range(100),init_func=init, interval=500);
  ani.save("E:/test.gif",writer='pillow');

  plt.ioff()         # 关闭交互模式

2.实例

已知下面采样自Sin函数的数据:

  x y
1 0.093 -0.81
2 0.58 -0.45
3 1.04 -0.007
4 1.55 0.48
5 2.15 0.89
6 2.62 0.997
7 2.71 0.995
8 2.73 0.993
9 3.03 0.916
10 3.14 0.86
11 3.58 0.57
12 3.66 0.504
13 3.81 0.369
14 3.83 0.35
15 4.39 -0.199
16 4.44 -0.248
17 4.6 -0.399
18 5.39 -0.932
19 5.54 -0.975
20 5.76 -0.999

通过一个简单的三层神经网络训练一个Sin函数的拟合器,并可视化模型训练过程的拟合曲线。

2.1 网络训练实现

主要做的事情是定义一个三层的神经网络,输入层节点数为1,隐藏层节点数为10,输出层节点数为1。

import math;
import random;
from matplotlib import pyplot as plt
from keras.models import Sequential
from keras.layers.core import Dense
from keras.optimizers import Adam
import numpy as np
from keras.callbacks import ModelCheckpoint
import os

#采样函数
def sample(low, up, num):
  data = [];
  for i in range(num):
    #采样
    tmp = random.uniform(low, up);
    data.append(tmp);
  data.sort();
  return data;

#sin函数
def func(x):
  y = [];
  for i in range(len(x)):
    tmp = math.sin(x[i] - math.pi/3);
    y.append(tmp);
  return y;

#获取模型拟合结果
def getfit(model,x):
  y = [];
  for i in range(len(x)):
    tmp = model.predict([x[i]], 10);
    y.append(tmp[0][0]);
  return y;

#删除同一目录下的所有文件
def del_file(path):
  ls = os.listdir(path)
  for i in ls:
    c_path = os.path.join(path, i)
    if os.path.isdir(c_path):
      del_file(c_path)
    else:
      os.remove(c_path)

if __name__ == '__main__':
  path = "E:/Model/";
  del_file(path);

  low = 0;
  up = 2 * math.pi;
  x = np.linspace(low, up, 1000);
  y = func(x);

  # 数据采样
#   x_sample = sample(low,up,20);
  x_sample = [0.09326442022999694, 0.5812590520508311, 1.040490143783586, 1.5504427746047338, 2.1589557183817036, 2.6235357787018407, 2.712578091093361, 2.7379109336528167, 3.0339662651841186, 3.147676812083248, 3.58596337171837, 3.6621496731124314, 3.81130899864203, 3.833092859928872, 4.396611340802901, 4.4481080339256875, 4.609657879057151, 5.399731063412583, 5.54299720786794, 5.764084730699906];
  y_sample = func(x_sample);

  # callback
  filepath="E:/Model/weights-improvement-{epoch:00d}.hdf5";
  checkpoint= ModelCheckpoint(filepath, verbose=1, save_best_only=False, mode='max');
  callbacks_list= [checkpoint];

  # 建立顺序神经网络层次模型
  model = Sequential();
  model.add(Dense(10, input_dim=1, init='uniform', activation='relu'));
  model.add(Dense(1, init='uniform', activation='tanh'));
  adam = Adam(lr = 0.05);
  model.compile(loss='mean_squared_error', optimizer=adam, metrics=['accuracy']);
  model.fit(x_sample, y_sample, nb_epoch=1000, batch_size=20,callbacks=callbacks_list);

  #测试数据
  x_new = np.linspace(low, up, 1000);
  y_new = getfit(model,x_new);

  # 数据可视化
  plt.plot(x,y);
  plt.scatter(x_sample, y_sample);
  plt.plot(x_new,y_new);

  plt.show();

2.2 模型保存

在神经网络训练的过程中,有一个非常重要的操作,就是将训练过程中模型的参数保存到本地,这是后面拟合过程可视化的基础。训练过程中保存的模型文件,如下图所示。

模型保存的关键在于fit函数中callback函数的设置,注意到,下面的代码,每次迭代,算法都会执行callbacks函数指定的函数列表中的方法。这里,我们的回调函数设置为ModelCheckpoint,其参数如下表所示:

参数 含义
filename 字符串,保存模型的路径
verbose
信息展示模式,0或1

(Epoch 00001: saving model to ...)

mode ‘auto',‘min',‘max'
monitor 需要监视的值
save_best_only 当设置为True时,监测值有改进时才会保存当前的模型。在save_best_only=True时决定性能最佳模型的评判准则,例如,当监测值为val_acc时,模式应为max,当监测值为val_loss时,模式应为min。在auto模式下,评价准则由被监测值的名字自动推断
save_weights_only 若设置为True,则只保存模型权重,否则将保存整个模型(包括模型结构,配置信息等)
period CheckPoint之间的间隔的epoch数
 # callback
  filepath="E:/Model/weights-improvement-{epoch:00d}.hdf5";
  checkpoint= ModelCheckpoint(filepath, verbose=1, save_best_only=False, mode='max');
  callbacks_list= [checkpoint];

  # 建立顺序神经网络层次模型
  model = Sequential();
  model.add(Dense(10, input_dim=1, init='uniform', activation='relu'));
  model.add(Dense(1, init='uniform', activation='tanh'));
  adam = Adam(lr = 0.05);
  model.compile(loss='mean_squared_error', optimizer=adam, metrics=['accuracy']);
  model.fit(x_sample, y_sample, nb_epoch=1000, batch_size=20,callbacks=callbacks_list);

2.3 拟合过程可视化实现

利用上述保存的模型,我们就可以通过matplotlib实时地显示拟合过程。

import math;
import random;
from matplotlib import pyplot as plt
from keras.models import Sequential
from keras.layers.core import Dense
import numpy as np
import matplotlib.animation as animation
from PIL import Image

#定义kdd99数据预处理函数
def sample(low, up, num):
  data = [];
  for i in range(num):
    #采样
    tmp = random.uniform(low, up);
    data.append(tmp);
  data.sort();
  return data;

def func(x):
  y = [];
  for i in range(len(x)):
    tmp = math.sin(x[i] - math.pi/3);
    y.append(tmp);
  return y;

def getfit(model,x):
  y = [];
  for i in range(len(x)):
    tmp = model.predict([x[i]], 10);
    y.append(tmp[0][0]);
  return y;

def init():
  fpath = "E:/imgs/0.jpg";
  img = Image.open(fpath);
  plt.axis('off') # 关掉坐标轴为 off
  return plt.imshow(img);

def update(i):
  fpath = "E:/imgs/" + str(i) + ".jpg";
  img = Image.open(fpath);
  plt.axis('off') # 关掉坐标轴为 off
  return plt.imshow(img);

if __name__ == '__main__':
  low = 0;
  up = 2 * math.pi;
  x = np.linspace(low, up, 1000);
  y = func(x);

  # 数据采样
#   x_sample = sample(low,up,20);
  x_sample = [0.09326442022999694, 0.5812590520508311, 1.040490143783586, 1.5504427746047338, 2.1589557183817036, 2.6235357787018407, 2.712578091093361, 2.7379109336528167, 3.0339662651841186, 3.147676812083248, 3.58596337171837, 3.6621496731124314, 3.81130899864203, 3.833092859928872, 4.396611340802901, 4.4481080339256875, 4.609657879057151, 5.399731063412583, 5.54299720786794, 5.764084730699906];
  y_sample = func(x_sample);

  # 建立顺序神经网络层次模型
  model = Sequential();
  model.add(Dense(10, input_dim=1, init='uniform', activation='relu'));
  model.add(Dense(1, init='uniform', activation='tanh'));

  plt.ion(); #开启interactive mode 成功的关键函数
  fig = plt.figure(1);

  for i in range(100):
    filepath="E:/Model/weights-improvement-" + str(i + 1) + ".hdf5";
    model.load_weights(filepath);
    #测试数据
    x_new = np.linspace(low, up, 1000);
    y_new = getfit(model,x_new);
    # 显示数据
    plt.clf();
    plt.plot(x,y);
    plt.scatter(x_sample, y_sample);
    plt.plot(x_new,y_new);

    ffpath = "E:/imgs/" + str(i) + ".jpg";
    plt.savefig(ffpath);

    plt.pause(0.01)       # 暂停0.01秒

  ani = animation.FuncAnimation(plt.figure(2), update,range(100),init_func=init, interval=500);
  ani.save("E:/test.gif",writer='pillow');

  plt.ioff()

以上所述是小编给大家介绍的matplotlib动态显示详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Python 读取串口数据,动态绘图的示例

    最近工作需要把单片机读取的传感器电压数据实时在PC上通过曲线显示出来,刚好在看python, 就试着用了python 与uart端口通讯,并且通过matplotlib.pyplot 模块实时绘制图形出来. 1. 废话少说,上图 因为没有UI,运行时需要在提示符下输入串口相关参数,com端口,波特率... 代码如下: #-*- coding: utf-8 -*- # 串口测试程序 import serial import matplotlib.pyplot as plt import numpy

  • python 实现在tkinter中动态显示label图片的方法

    在编程中我们往往会希望能够实现这样的操作:点击Button,选择了图片,然后在窗口中的Label处显示选到的图片.那么这时候就需要如下代码: from tkinter import * from tkinter.filedialog import askopenfilename def choosepic(): path_=askopenfilename() path.set(path_) img_gif=Tkinter.PhotoImage(file='xxx.gif') l1.config(

  • 在Python的gevent框架下执行异步的Solr查询的教程

    我经常需要用Python与solr进行异步请求工作.这里有段代码阻塞在Solr http请求上, 直到第一个完成才会执行第二个请求,代码如下: import requests #Search 1 solrResp = requests.get('http://mysolr.com/solr/statedecoded/search?q=law') for doc in solrResp.json()['response']['docs']: print doc['catch_line'] #Sea

  • python 动态迁移solr数据过程解析

    前言 上项目的时候,遇见一次需求,需要把在线的 其中一个 collection 里面的数据迁移到另外一个collection下,于是就百度了看到好多文章,其中大部分都是使用导入的方法,没有找到在线数据的迁移方法.于是写了python脚本,分享出来. 思路: collection数据量比较大,所以一次性操作所有数据太大,于是分段执行操作. 先分段 按1000条数据量进行查询,处理成json数据 把处理后的json数据 发送到目的collection上即可 实现: 一.使用http的接口先进行查询

  • 对python 操作solr索引数据的实例详解

    测试代码1: def test(self): data = {"add": {"doc": {"id": "100001", "*字段名*": u"我是一个大好人"}}} params = {"boost": 1.0, "overwrite": "true", "commitWithin": 1000} ur

  • python调用动态链接库的基本过程详解

    动态链接库在Windows中为.dll文件,在linux中为.so文件.以linux平台为例说明python调用.so文件的使用方法. 本例中默认读者已经掌握动态链接库的生成方法,如果不太清楚的可以参考动态链接库的使用 调用上例动态链接库的使用中的sum.so import ctypes so = ctypes.CDLL('./sum.so') print "so.sum(50) = %d" % so.sum(50) so.display("hello world!"

  • Python使用MyQR制作专属动态彩色二维码功能

    Python中有一个非常有趣好玩的库MyQR,不仅可以制作各种漂亮的二维码,还可以生成动态彩色二维码. MyQR是一个能够生成自定义二维码的第三方库,你可以根据需要生成普通二维码.带图片的艺术二维码,也可以生成动态二维码. 生成动态二维码 效果图如下: 二维码扫描上图看看 我们首先要安装MyQR库,直接用pip3 install myqr(or MyQR).需要注意的是MyQR依赖于Python3,在Python2的环境下可能无法正常运行. 这个库提供了两种使用方法,一种是直接使用命令行的方式,

  • 【python】matplotlib动态显示详解

    1.matplotlib动态绘图 python在绘图的时候,需要开启 interactive mode.核心代码如下: plt.ion(); #开启interactive mode 成功的关键函数 fig = plt.figure(1); for i in range(100): filepath="E:/Model/weights-improvement-" + str(i + 1) + ".hdf5"; model.load_weights(filepath);

  • Python matplotlib绘图详解

    目录 图标英文显示设置: 一.figure窗口及坐标轴设置 二.为特殊点加注解(Annotation) 总结 图标英文显示设置: 正常以字符串形式传进去字串,英文显示格式不是很美观,为了让文字更美观点,在书写时以这种格式写: r'$string$' 在这里,如果需要特殊数学字符使用 \ 转义,空格也需要转义 比如:r'$This\ is\ the\ some\ text.\ \mu\ \sigma_i\ \alpha_t$' 一.figure窗口及坐标轴设置 plt.figure(figsize

  • Python绘图之详解matplotlib

    一.matplotlib介绍 matplotlib是python从matlab继承的绘图库,可以满足大部分的日常使用,是目前最流行的底层绘图库. 二.matplotlib的使用 (一)导入模块[中文显示] 显示中文方面mac和windows根据自己电脑系统选一个即可 import matplotlib.pyplot as plt # 显示中文(mac) from matplotlib.font_manager import FontManager fm = FontManager() mat_f

  • Python数据分析之matplotlib绘图详解

    目录 多子图 散点图 水平柱状图 同位置柱状图 多子图 figure是绘制对象(可以理解为一个空白的画布),一个figure对象可以包含多个Axes子图,一个Axes是一个绘图区域,不加设置时,Axes为1,且每次绘图其实都是在figure上的Axes上绘图. 我们是在图形对象上面的Axes区域进行作画 1.add_axes():添加区域 2.Matplotlib定义一个axes类,该类的对象称为axes对象(即轴域对象),它指定一个有数值范围限制的绘图区域.再给定一个画布中,可以包含多个axe

  • windows上安装Anaconda和python的教程详解

    一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因此,我们这里使用Python这个脚本语言来进行数字图像处理. 要使用Python,必须先安装python,一般是2.7版本以上,不管是在windows系统,还是Linux系统,安装都是非常简单的. 要使用python进行各种开发和科学计算,还需要安装对应的包.这和matlab非常相似,只是matla

  • python imread函数详解

    Python 中各种imread函数的区别与联系 最近一直在用python做图像处理相关的东西,被各种imread函数搞得很头疼,因此今天决定将这些imread总结一下,以免以后因此犯些愚蠢的错误.如果你正好也对此感到困惑可以看下这篇总结.当然,要了解具体的细节,还是应该 read the fuck code和API document,但貌似python的很多模块文档都不是很全,所以只能多看代码和注释了. 先来看看常用的读取图片的方式: PIL.Image.open scipy.misc.imr

  • Python数据可视化详解

    目录 一.Matplotlib模块 1.绘制基本图表 1. 绘制柱形图 2. 绘制条形图 3. 绘制折线图 4. 绘制面积图 5. 绘制散点图 6. 绘制饼图和圆环图 2.图表的绘制和美化技巧 1. 在一张画布中绘制多个图表 2. 添加图表元素 3. 添加并设置网格线 4. 调整坐标轴的刻度范围 3.绘制高级图表 1. 绘制气泡图 2. 绘制组合图 3. 绘制直方图 4. 绘制雷达图 5. 绘制树状图 6. 绘制箱形图 7. 绘制玫瑰图 二.pyecharts模块 1.图表配置项 2.绘制漏斗图

  • Python网络编程详解

    1.服务器就是一系列硬件或软件,为一个或多个客户端(服务的用户)提供所需的"服务".它存在唯一目的就是等待客户端的请求,并响应它们(提供服务),然后等待更多请求. 2.客户端/服务器架构既可以应用于计算机硬件,也可以应用于计算机软件. 3.在服务器响应客户端之前,首先会创建一个通信节点,它能够使服务器监听请求. 一.套接字:通信端点 1.套接字 套接字是计算机网络数据结构,它体现了上节中所描述的"通信端点"的概念.在任何类型的通信开始之前,网络应用程序必须创建套接字

  • Python 多线程实例详解

    Python 多线程实例详解 多线程通常是新开一个后台线程去处理比较耗时的操作,Python做后台线程处理也是很简单的,今天从官方文档中找到了一个Demo. 实例代码: import threading, zipfile class AsyncZip(threading.Thread): def __init__(self, infile, outfile): threading.Thread.__init__(self) self.infile = infile self.outfile =

  • Docker 打包python的命令详解

    最近用Python写了一段爬虫程序,为了隔离其运行环境,易于分发,把项目打包成Docker镜像 Dockerfile FROM python:2.7.12-alpine ADD ./src /job CMD ["python", "/job/main.py"] 构建命令 $ docker build -t job . 运行 $ docker run -d --name job job 比较简单 以上所述是小编给大家介绍的Docker 打包python的命令详解,希望

随机推荐