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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

MXNet——symbol

發布時間:2025/3/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MXNet——symbol 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考資料:有基礎(Pytorch/TensorFlow基礎)mxnet+gluon快速入門

symbol

symbol 是一個重要的概念,可以理解為符號,就像我們平時使用的代數符號 x,y,z 一樣。一個簡單的類比,一個函數 \(f(x) = x^{2}\),符號 x 就是 symbol,而具體 x 的值就是 ndarray,關于 symbol 的是 mxnet.sym,具體可參照官方API文檔

基本操作

  • 使用 mxnet.sym.Variable() 傳入名稱可建立一個 symbol
  • 使用 mxnet.viz.plot_network(symbol=) 傳入 symbol 可以繪制運算圖
import os os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz/bin/' # 解決 path 錯誤 import mxnet as mxa = mx.sym.Variable('a') b = mx.sym.Variable('b') c = mx.sym.add_n(a,b,name="c") mx.viz.plot_network(symbol=c)

帶入 ndarray

使用 mxnet.sym.bind() 方法可以獲得一個帶入操作數的對象,再使用 forward() 方法可運算出數值

x = c.bind(ctx=mx.cpu(),args={"a": mx.nd.ones(5),"b":mx.nd.ones(5)}) result = x.forward() print(result) [ [2. 2. 2. 2. 2.] <NDArray 5 @cpu(0)>]

mxnet 的數據載入

深度學習中數據的載入方式非常重要,mxnet 提供了 mxnet.io 的一系列 dataiter 用于處理數據載入,詳細可參照官方API文檔。同時,動態圖接口gluon 也提供了 mxnet.gluon.data 系列的 dataiter 用于數據載入,詳細可參照官方API文檔

mxnet.io 數據載入

mxnet.io的數據載入核心是 mxnet.io.DataIter 類及其派生類,例如 ndarray 的 iter:NDArrayIter

  • 參數 data:傳入一個(名稱-數據)的數據 dict
  • 參數 label:傳入一個(名稱-標簽)的標簽 dict
  • 參數 batch_size:傳入 batch 大小
dataset = mx.io.NDArrayIter(data={'data':mx.nd.ones((10,5))},label={'label':mx.nd.arange(10)},batch_size=5) for i in dataset: print(i) print(i.data,type(i.data[0])) print(i.label,type(i.label[0])) DataBatch: data shapes: [(5, 5)] label shapes: [(5,)] [ [[1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.]] <NDArray 5x5 @cpu(0)>] <class 'mxnet.ndarray.ndarray.NDArray'> [ [0. 1. 2. 3. 4.] <NDArray 5 @cpu(0)>] <class 'mxnet.ndarray.ndarray.NDArray'> DataBatch: data shapes: [(5, 5)] label shapes: [(5,)] [ [[1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.]] <NDArray 5x5 @cpu(0)>] <class 'mxnet.ndarray.ndarray.NDArray'> [ [5. 6. 7. 8. 9.] <NDArray 5 @cpu(0)>] <class 'mxnet.ndarray.ndarray.NDArray'>

gluon.data 數據載入

gluon 的數據 API 幾乎與 pytorch 相同,均是 Dataset+DataLoader 的方式:

  • Dataset:存儲數據,使用時需要繼承該基類并重載 __len__(self) 和 __getitem__(self,idx) 方法
  • DataLoader:將 Dataset 變成能產生 batch 的可迭代對象
dataset = mx.gluon.data.ArrayDataset(mx.nd.ones((10,5)),mx.nd.arange(10)) loader = mx.gluon.data.DataLoader(dataset,batch_size=5) for i,data in enumerate(loader): print(i) print(data) 0 [ [[1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.]] <NDArray 5x5 @cpu(0)>, [0. 1. 2. 3. 4.] <NDArray 5 @cpu(0)>] 1 [ [[1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.]] <NDArray 5x5 @cpu(0)>, [5. 6. 7. 8. 9.] <NDArray 5 @cpu(0)>] class TestSet(mx.gluon.data.Dataset):def __init__(self): self.x = mx.nd.zeros((10,5)) self.y = mx.nd.arange(10) def __getitem__(self,i): return self.x[i],self.y[i] def __len__(self): return 10 for i,data in enumerate(mx.gluon.data.DataLoader(TestSet(),batch_size=5)): print(data) [ [[0. 0. 0. 0. 0.][0. 0. 0. 0. 0.][0. 0. 0. 0. 0.][0. 0. 0. 0. 0.][0. 0. 0. 0. 0.]] <NDArray 5x5 @cpu(0)>, [[0.][1.][2.][3.][4.]] <NDArray 5x1 @cpu(0)>] [ [[0. 0. 0. 0. 0.][0. 0. 0. 0. 0.][0. 0. 0. 0. 0.][0. 0. 0. 0. 0.][0. 0. 0. 0. 0.]] <NDArray 5x5 @cpu(0)>, [[5.][6.][7.][8.][9.]] <NDArray 5x1 @cpu(0)>]

網絡搭建

mxnet 網絡搭建

mxnet 網絡搭建類似于 TensorFlow,使用 symbol 搭建出網絡,再用一個 module 封裝

data = mx.sym.Variable('data') # layer1 conv1 = mx.sym.Convolution(data=data, kernel=(5,5), num_filter=32,name="conv1") relu1 = mx.sym.Activation(data=conv1,act_type="relu",name="relu1") pool1 = mx.sym.Pooling(data=relu1,pool_type="max",kernel=(2,2),stride=(2,2),name="pool1") # layer2 conv2 = mx.sym.Convolution(data=pool1, kernel=(3,3), num_filter=64,name="conv2") relu2 = mx.sym.Activation(data=conv2,act_type="relu",name="relu2") pool2 = mx.sym.Pooling(data=relu2,pool_type="max",kernel=(2,2),stride=(2,2),name="pool2") # layer3 fc1 = mx.symbol.FullyConnected(data=mx.sym.flatten(pool2), num_hidden=256,name="fc1") relu3 = mx.sym.Activation(data=fc1, act_type="relu",name="relu3") # layer4 fc2 = mx.symbol.FullyConnected(data=relu3, num_hidden=10,name="fc2") out = mx.sym.SoftmaxOutput(data=fc2, label=mx.sym.Variable("label"),name='softmax') mxnet_model = mx.mod.Module(symbol=out,label_names=["label"],context=mx.gpu()) mx.viz.plot_network(symbol=out)

福利:剛剛發現一個解決路徑錯誤的方法:只需要將 *\Anaconda3\Library\bin\graphviz 添加到 Path 環境變量之下即可 (安裝后記得重啟,環境變量修改才可以生效,調用庫,即可成功)!

轉載于:https://www.cnblogs.com/q735613050/p/9315504.html

總結

以上是生活随笔為你收集整理的MXNet——symbol的全部內容,希望文章能夠幫你解決所遇到的問題。

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