日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

体验paddle2.0rc版本API-Model--实现Mnist数据集模型训练

發布時間:2024/7/5 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 体验paddle2.0rc版本API-Model--实现Mnist数据集模型训练 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文鏈接:體驗paddle2.0rc版本API-Model–實現Mnist數據集模型訓練:https://blog.csdn.net/weixin_44604887/article/details/109566281

嘗試Mnist訓練

  • 導入需要的包
  • 導入Mnist數據集
  • 組網
    • 搭建網絡
    • 查看模型參數
    • 查看模型網絡(自動命名)
  • 利用Model-API進行訓練
    • 模型傳入
    • Model-API參數配置
    • fit--訓練
    • 模型評估
  • 加載保存的模型
    • 創建相同的網絡模型--用于加載保存的模型參數
    • 查看當前運算所在環境是否在GPU
    • 加載模型參數
      • 方法一
      • 方法二
    • Model-API參數配置
    • 保存模型的評估
  • 總結

QQ:3020889729 小蔡

主要內容:

  • 利用paddle.vision.datasets加載paddle自帶的圖像數據集
  • 利用paddle.nn.Sequntial進行順序層網絡組網–快捷組網
  • 利用paddle.Model進行paddle自帶的模型高級API進行一系列簡便的訓練,模型保存以及評估等
  • 利用paddle.Model的load方法,對使用Model下saveAPI保存的模型進行加載
  • (主體代碼源于官方文檔,僅對部分知識點進行擴展和說明)

    導入需要的包

    import paddle import paddle.nn as nn # 導入網絡模塊:包含所需要的模塊 from paddle import optimizer # 導入優化器模塊 from paddle import Model # 導入模型高級API,可傳入設計好的網絡模型,進行一系列的fit訓練等操作 from paddle import metric # 導入度量模塊:模型準確率計算等 from paddle.vision import datasets # 導入數據集接口

    print(paddle.version) # 打印paddle版本號

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    導入Mnist數據集

    datasets.MNIST的參數為mode

    • mode=‘train’ 為默認值,返回訓練集
    • mode=‘test’ 返回驗證集
    train_datasets = datasets.MNIST(mode='train') # 加載訓練數據 test_datasets = datasets.MNIST(mode='test')
    • 1
    • 2

    組網

    搭建網絡

    利用線性層進行組網

    mnist = nn.Sequential(nn.Flatten(), # 平鋪層,將多維數據展開為一維數據--將[N, ...] 轉化為 [N, x]nn.Linear(784, 512), # 線性層(全連接層), 將input_size=N*784 -> N*512nn.ReLU(), # 激活曾(配置激活函數,添加非線性因子), 將上一層Linear的輸出通過Relu激活層nn.Dropout(0.2), # 丟棄層(dropout防過擬合), 使用Dropout層進行隨機drop(計算輸出時,隨機將某些值替換為0)nn.Linear(512, 10) # 將經過dropout層的輸出size=512 -> 10 -> 得到輸出類別 )
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    查看模型參數

    # 查看模型參數--以及命名(字典形式) for name, value in mnist.named_parameters(): print(name, '->', value)
    • 1
    • 2
    • 3
    • 4

    查看模型網絡(自動命名)

    # 查看模型中的子層--即順序層中的子層 --包括命名(字典形式) for name, value in mnist.named_children(): print(name, '->', value.full_name())

    # 一定程度上等價于以下代碼
    #for name, value in mnist.named_sublayers():
    # print(name, ‘->’, value.full_name())

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    順序層下的網絡展示

    利用Model-API進行訓練

    模型傳入

    # 利用paddle訓練API進行快捷訓練 model = paddle.Model(mnist) # 將創建的網絡送入模型API
    • 1
    • 2
    • 3

    Model-API參數配置

    # 模型API使用前所需傳入參數--在訓練前需要使用prepare進行訓練配置 # 1-> optim(優化方法) # 2-> loss(損失/目標函數) # 3-> metric(評價/度量指標) model.prepare(optimizer.Adam(parameters=mnist.parameters()), # Adam優化方法nn.CrossEntropyLoss(), # CE損失metric.Accuracy() # 準確率 )
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    fit–訓練

    fit參數:

    • 明確常用fit參數 – 前四個
    • train_data:訓練數據–必須要有的
    • eval_data: 驗證數據–如果沒有就不驗證
    • batch_size: 批大小–盡量設,默認為1
    • verbose: 訓練進度展示模式–0:無;1,每一個輪次展示進度條模式;2:將輪次作為迭代展示對象;
    • eval_freq:評估頻率–指間隔多少個eval進行一次評估–默認為1
    • log_freq:同樣的,日志輸出頻率–默認為10
    • save_dir:模型保存路徑–默認為None,不保存
    • save_freq: 保存頻率–同其他頻率
    • drop_last:最后一批數據如果不足batch_size,那么就舍去,不使用為訓練數據
    • shuffle: 是否打亂數據
    • num_workers:工作線程–多線程加載數據
    • save內容簡單說明: pdparams–模型的參數–weight等 pdopt–優化器的參數–學習率大小等
    model.fit(train_datasets, # 訓練數據集epochs=10, # 輪次batch_size=24, # 批大小: 一次訓練用多少個數據verbose=1, # 進度展示--0為不展示save_dir='./work/mnist' # 模型保存路徑:包含pdparams與pdopt文件 )
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    模型評估

    # 模型評估 # 參數: # eval_data:驗證集 # batch_size:批大小--默認為1 # log_freq:日志頻率 # verbose:進度條模型--0為不展示 # num_workers:多線程 model.evaluate(test_datasets, verbose=1)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    加載保存的模型

    創建相同的網絡模型–用于加載保存的模型參數

    # 創建一摸一樣的模型 new_model = nn.Sequential(nn.Flatten(), # 將[N, ...] 轉化為 [N, x]nn.Linear(784, 512), # 將input_size=N*784 -> N*512nn.ReLU(), # 將上一層Linear的輸出通過Relu激活層nn.Dropout(0.2), # 使用Dropout層進行隨機drop(計算輸出時,隨機將某些值替換為0)nn.Linear(512, 10) # 將經過dropout層的輸出size=512 -> 10 )
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    查看當前運算所在環境是否在GPU

    paddle.is_compiled_with_cuda() # 判斷當前允許環境--在gpu上返回True
    • 1

    加載模型參數

    方法一

    # 按照paddle.Model.load-API 來加載參數 new_Model = Model(new_model) new_Model.load('./work/mnist/final') # 將保存的參數加載到當前的模型中

    for value in new_Model.parameters(): # 在ModelAPI下查看模型參數
    print(value)

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    方法二

    new_model.load_dict(paddle.load('./work/mnist/final.pdparams')) # 利用原始paddle通用模型加載API加載模型參數后,再傳入ModelAPI new_Model = Model(new_model)
    • 1
    • 2

    Model-API參數配置

    new_Model.prepare( # 利用set_state_dict加載優化器對應的參數--比如學習率等 optimizer.Adam(parameters=new_model.parameters()).set_state_dict(paddle.load('./work/mnist/final.pdopt')), nn.CrossEntropyLoss(),metric.Accuracy() )
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    保存模型的評估

    new_Model.evaluate(test_datasets, verbose=1)
    • 1

    總結

  • paddle2.0rc在整體上變化很大,首先是全面支持動態圖,方便某火炬的小伙伴轉到paddle進行學習
  • 組網API更加親近,將相關組網操作都放到了一起–比如Flatten平鋪操作與激活函數作為網絡層,方便組網時方法的查訊
  • 高級API–Model的使用,方便了一般的訓練過程,簡化初始模型訓練選型的成本(為后期模型選擇后優化精度等節約了時間)
  • 這次升級,最最最主要的還是API分類更明顯,可用性和可讀性有了更好的提升,這次簡直杠杠的!!!
  • 以下是API分類圖(源于官方文檔)

    總結

    以上是生活随笔為你收集整理的体验paddle2.0rc版本API-Model--实现Mnist数据集模型训练的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。