最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

【python】matplotlib動態(tài)顯示詳解

 更新時間:2019年04月11日 11:36:31   作者:CallMeJacky  
這篇文章主要介紹了matplotlib動態(tài)顯示,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1.matplotlib動態(tài)繪圖

python在繪圖的時候,需要開啟 interactive mode。核心代碼如下:

plt.ion(); #開啟interactive mode 成功的關(guān)鍵函數(shù)
  fig = plt.figure(1);
  
  for i in range(100):
    filepath="E:/Model/weights-improvement-" + str(i + 1) + ".hdf5";
    model.load_weights(filepath);
    #測試數(shù)據(jù)
    x_new = np.linspace(low, up, 1000);
    y_new = getfit(model,x_new);
    # 顯示數(shù)據(jù)
    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()         # 關(guān)閉交互模式

2.實(shí)例

已知下面采樣自Sin函數(shù)的數(shù)據(jù):

  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

 通過一個簡單的三層神經(jīng)網(wǎng)絡(luò)訓(xùn)練一個Sin函數(shù)的擬合器,并可視化模型訓(xùn)練過程的擬合曲線。

2.1 網(wǎng)絡(luò)訓(xùn)練實(shí)現(xiàn)

主要做的事情是定義一個三層的神經(jīng)網(wǎng)絡(luò),輸入層節(jié)點(diǎn)數(shù)為1,隱藏層節(jié)點(diǎn)數(shù)為10,輸出層節(jié)點(diǎn)數(shù)為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
 
 
#采樣函數(shù)
def sample(low, up, num):
  data = [];
  for i in range(num):
    #采樣
    tmp = random.uniform(low, up);
    data.append(tmp);
  data.sort();
  return data;
 
#sin函數(shù)
def func(x):
  y = [];
  for i in range(len(x)):
    tmp = math.sin(x[i] - math.pi/3);
    y.append(tmp);
  return y;
 
#獲取模型擬合結(jié)果
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);
  
  # 數(shù)據(jù)采樣
#   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];
  
  # 建立順序神經(jīng)網(wǎng)絡(luò)層次模型
  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);
  
  #測試數(shù)據(jù)
  x_new = np.linspace(low, up, 1000);
  y_new = getfit(model,x_new);
  
  # 數(shù)據(jù)可視化
  plt.plot(x,y); 
  plt.scatter(x_sample, y_sample);
  plt.plot(x_new,y_new);
  
  plt.show();

2.2 模型保存

 在神經(jīng)網(wǎng)絡(luò)訓(xùn)練的過程中,有一個非常重要的操作,就是將訓(xùn)練過程中模型的參數(shù)保存到本地,這是后面擬合過程可視化的基礎(chǔ)。訓(xùn)練過程中保存的模型文件,如下圖所示。

模型保存的關(guān)鍵在于fit函數(shù)中callback函數(shù)的設(shè)置,注意到,下面的代碼,每次迭代,算法都會執(zhí)行callbacks函數(shù)指定的函數(shù)列表中的方法。這里,我們的回調(diào)函數(shù)設(shè)置為ModelCheckpoint,其參數(shù)如下表所示:

參數(shù) 含義
filename 字符串,保存模型的路徑
verbose

信息展示模式,0或1

(Epoch 00001: saving model to ...)

mode ‘a(chǎn)uto',‘min',‘max'
monitor 需要監(jiān)視的值
save_best_only 當(dāng)設(shè)置為True時,監(jiān)測值有改進(jìn)時才會保存當(dāng)前的模型。在save_best_only=True時決定性能最佳模型的評判準(zhǔn)則,例如,當(dāng)監(jiān)測值為val_acc時,模式應(yīng)為max,當(dāng)監(jiān)測值為val_loss時,模式應(yīng)為min。在auto模式下,評價準(zhǔn)則由被監(jiān)測值的名字自動推斷
save_weights_only 若設(shè)置為True,則只保存模型權(quán)重,否則將保存整個模型(包括模型結(jié)構(gòu),配置信息等)
period CheckPoint之間的間隔的epoch數(shù)

 # callback
  filepath="E:/Model/weights-improvement-{epoch:00d}.hdf5";
  checkpoint= ModelCheckpoint(filepath, verbose=1, save_best_only=False, mode='max');
  callbacks_list= [checkpoint];
  
  # 建立順序神經(jīng)網(wǎng)絡(luò)層次模型
  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 擬合過程可視化實(shí)現(xiàn)

利用上述保存的模型,我們就可以通過matplotlib實(shí)時地顯示擬合過程。

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數(shù)據(jù)預(yù)處理函數(shù)
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') # 關(guān)掉坐標(biāo)軸為 off
  return plt.imshow(img);
 
def update(i): 
  fpath = "E:/imgs/" + str(i) + ".jpg";
  img = Image.open(fpath);
  plt.axis('off') # 關(guān)掉坐標(biāo)軸為 off
  return plt.imshow(img);
 
if __name__ == '__main__':  
  low = 0;
  up = 2 * math.pi;
  x = np.linspace(low, up, 1000);
  y = func(x);
  
  # 數(shù)據(jù)采樣
#   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);
  
  # 建立順序神經(jīng)網(wǎng)絡(luò)層次模型
  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 成功的關(guān)鍵函數(shù)
  fig = plt.figure(1);
  
  for i in range(100):
    filepath="E:/Model/weights-improvement-" + str(i + 1) + ".hdf5";
    model.load_weights(filepath);
    #測試數(shù)據(jù)
    x_new = np.linspace(low, up, 1000);
    y_new = getfit(model,x_new);
    # 顯示數(shù)據(jù)
    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動態(tài)顯示詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Python實(shí)現(xiàn)分段線性插值

    Python實(shí)現(xiàn)分段線性插值

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)分段線性插值,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Python基于自然語言處理開發(fā)文本摘要系統(tǒng)

    Python基于自然語言處理開發(fā)文本摘要系統(tǒng)

    自然語言處理(NLP)是人工智能領(lǐng)域中一個重要的研究方向,而文本摘要作為NLP的一個重要應(yīng)用,在信息爆炸的時代具有重要意義,下面我們來看看如何開發(fā)一個基于Python的文本摘要系統(tǒng)吧
    2025-04-04
  • python?ocr簡單示例之識別驗(yàn)證碼

    python?ocr簡單示例之識別驗(yàn)證碼

    OCR(Optical character recognition,光學(xué)字符識別)是一種將圖像中的手寫字或者印刷文本轉(zhuǎn)換為機(jī)器編碼文本的技術(shù),下面這篇文章主要給大家介紹了關(guān)于python?ocr簡單示例之識別驗(yàn)證碼的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 使用PyGame顯示圖像的四種方案實(shí)例代碼

    使用PyGame顯示圖像的四種方案實(shí)例代碼

    由于前面學(xué)習(xí)了使用pygame的簡單操作,現(xiàn)在學(xué)習(xí)當(dāng)前的pygame怎么加載圖片,下面這篇文章主要給大家介紹了關(guān)于使用PyGame顯示圖像的四種方案,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • python re模塊常見用法例舉

    python re模塊常見用法例舉

    在本篇文章里小編給大家整理的是一篇關(guān)于python re模塊常見用法例舉內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-03-03
  • numpy 進(jìn)行數(shù)組拼接,分別在行和列上合并的實(shí)例

    numpy 進(jìn)行數(shù)組拼接,分別在行和列上合并的實(shí)例

    今天小編就為大家分享一篇numpy 進(jìn)行數(shù)組拼接,分別在行和列上合并的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • python實(shí)現(xiàn)串口通信的示例代碼

    python實(shí)現(xiàn)串口通信的示例代碼

    python實(shí)現(xiàn)串口通信是一件簡單的事情,只要通過pyserial模塊就可以實(shí)現(xiàn),本文主要介紹了python實(shí)現(xiàn)串口通信的示例代碼,感興趣的可以了解一下
    2023-10-10
  • Python基于scrapy采集數(shù)據(jù)時使用代理服務(wù)器的方法

    Python基于scrapy采集數(shù)據(jù)時使用代理服務(wù)器的方法

    這篇文章主要介紹了Python基于scrapy采集數(shù)據(jù)時使用代理服務(wù)器的方法,涉及Python使用代理服務(wù)器的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • 深入Python函數(shù)編程的一些特性

    深入Python函數(shù)編程的一些特性

    這篇文章主要介紹了更為深入的Python函數(shù)編程的一些特性,本文來自于IBM官方開發(fā)者技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • python中文亂碼的解決方法

    python中文亂碼的解決方法

    亂碼在哪種語言里都會出現(xiàn),今天給你二個解決python中文亂碼的方法。
    2013-11-11

最新評論

安阳县| 祁东县| 方山县| 吴江市| 攀枝花市| 辛集市| 始兴县| 济宁市| 和田市| 临潭县| 阜南县| 香格里拉县| 庆阳市| 灵宝市| 永靖县| 疏附县| 资源县| 伊吾县| 建昌县| 包头市| 郎溪县| 富顺县| 巴彦县| 报价| 恩施市| 阆中市| 宝鸡市| 兴化市| 北碚区| 甘南县| 宝丰县| 饶平县| 富裕县| 南宫市| 庄河市| 绿春县| 稷山县| 宕昌县| 汝南县| 怀来县| 淄博市|