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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中digits什么意思_在Caffe中使用 DIGITS自定义Python层

發布時間:2023/12/31 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中digits什么意思_在Caffe中使用 DIGITS自定义Python层 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Caffe 使得我們有了使用Python自定義層的能力,而不是通常的C++/CUDA。這是一個非常有用的特性,但它的文檔記錄不足,難以正確實現本演練將向您展示如何使用DIGHT來學習實現Python層。

注意:這個特性(自定義python層)在你是使用Cmake編譯Caffe或者使用Deb 包來安裝Caffe的時候自動被包含。如果你使用Make,你將需要將你的Makefile.config中的"WITH_PYTHON_LAYER := 1"解注釋來啟用它。

給MNIST添加遮擋

對于這個例子,我們將在MNIST數據集上訓練LeNet,但是我們將建立一個python層,來實現在圖片喂進網絡之前,截取掉它的四分之一。這模擬遮擋的數據,這樣將會訓練出一個對遮擋更加魯棒的模型。

比如

變成

創建數據集

首先,仿照這個教程(https://github.com/NVIDIA/DIGITS/blob/master/docs/GettingStarted.md#creating-a-dataset)來使用DIGITS創建MNIST數據集(假設你還沒有創建)

創建Python文件

接下來你將創建一個包含你的Pyhon層定義的Python文件。打開一個文本編輯器,然后創建一個包含如下內容的文件。

importcaffeimportrandomclassBlankSquareLayer(caffe.Layer):defsetup(self, bottom, top):assert len(bottom) == 1, 'requires a single layer.bottom'

assert bottom[0].data.ndim >= 3, 'requires image data'

assert len(top) == 1, 'requires a single layer.top'

defreshape(self, bottom, top):#Copy shape from bottom

top[0].reshape(*bottom[0].data.shape)defforward(self, bottom, top):#Copy all of the data

top[0].data[...] =bottom[0].data[...]#Then zero-out one fourth of the image

height = top[0].data.shape[-2]

width= top[0].data.shape[-1]

h_offset= random.randrange(height/2)

w_offset= random.randrange(width/2)

top[0].data[...,

h_offset:(h_offset+ height/2),

w_offset:(w_offset+ width/2),

]=0defbackward(self, top, propagate_down, bottom):pass

其中,top和bottom是包含一個或者多個blob的列表或者數組,訪問其中的每一個blob使用下標index,如top[index],訪問其中的數據使用top[index].data,也就是一個四維向量[N,C,H,W]。

創建一個模型

注意:如果你以前沒有使用DIGITS創建一個模型,在創建之前,你可以參照教程(https://github.com/NVIDIA/DIGITS/blob/master/docs/GettingStarted.md#training-a-model)學習。

點擊主頁上的New Model > Images > Classification。

從數據集列表中選擇MNIST數據集。

單擊“Use client side file”,并選擇先前創建的Python文件。

點擊LeNet under Standard Networks > Caffe。

點擊右邊顯示的 Customize鏈接。

這將把我們帶到一個窗口,我們可以自定義LeNet來添加自定義的Python層。我們將在scale層和conv層之間插入我們的層。找到這些層(從頂部的幾行),并插入這段prototxt代碼的片段:

layer {

name: "blank_square"

type: "Python"

bottom: "scaled"

top: "scaled"

python_param {

module: "digits_python_layers"

layer: "BlankSquareLayer"

}

}

當你點擊Visualize,你將看到如下圖:

然后給模型一個名字,點擊Create。你將會看到模型訓練會話開始。如果你注意,你你將會發現這個模型會比默認的LeNet網絡精度低,這是為什么呢?

注意:當前的caffe版本不支持在有Python層的網絡上使用多GPU。如果你向使用Python層,那么你需要使用但GPU來訓練。詳見:https://github.com/BVLC/caffe/issues/2936

測試模型

現在開始比較有趣的部分。在MNIST測試集中選擇一張圖片,然后將它上傳到 Test a single image(在頁面的底下)

然后點擊Show visualizations 和 statistics! 原始的圖片將顯示在左上,然后是它的預測類型。在Visualization 列,你會看到減去均值的圖像作為數據激活的結果。

就在它下面,你會看到將圖像從[0~255 ]縮小到[-1~1 ]的結果。你也會看到一個隨機的四分之一的圖像已經被刪除-這是得益于我們的Python層!

注意:第二個激活顯示為彩色熱圖,即使底層數據仍然是單通道的,并且可以顯示為灰度圖像。“數據”激活被視為一種特殊情況,所有其他激活都被轉換為熱圖。

總結

以上是生活随笔為你收集整理的python中digits什么意思_在Caffe中使用 DIGITS自定义Python层的全部內容,希望文章能夠幫你解決所遇到的問題。

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