網站首頁 編程語言 正文
正文
如果用公式 ?y=f(wx+b)
來表示整個運算過程的話,那么w和b就是我們需要訓練的東西,w稱為權值,在cnn中也可以叫做卷積核(filter),b是偏置項。f是激活函數,有sigmoid、relu等。x就是輸入的數據。
數據訓練完成后,保存的caffemodel里面,實際上就是各層的w和b值。
我們運行代碼:
deploy=root + 'mnist/deploy.prototxt' #deploy文件
caffe_model=root + 'mnist/lenet_iter_9380.caffemodel' #訓練好的 caffemodel
net = caffe.Net(net_file,caffe_model,caffe.TEST) #加載model和network
就把所有的參數和數據都加載到一個net變量里面了,但是net是一個很復雜的object, 想直接顯示出來看是不行的。其中:
net.params: 保存各層的參數值(w和b)
net.blobs: 保存各層的數據值
可用命令:
[(k,v[0].data) for k,v in net.params.items()]
查看各層的參數值,其中k表示層的名稱,v[0].data就是各層的W值,而v[1].data是各層的b值。注意:并不是所有的層都有參數,只有卷積層和全連接層才有。
也可以不查看具體值,只想看一下shape,可用命令
[(k,v[0].data.shape) for k,v in net.params.items()]
假設我們知道其中第一個卷積層的名字叫'Convolution1', 則我們可以提取這個層的參數:
w1=net.params['Convolution1'][0].data
b1=net.params['Convolution1'][1].data
輸入這些代碼,實際查看一下,對你理解network非常有幫助。
同理,除了查看參數,我們還可以查看數據,但是要注意的是,net里面剛開始是沒有數據的,需要運行:
net.forward()
之后才會有數據。我們可以用代碼:
[(k,v.data.shape) for k,v in net.blobs.items()]
或
[(k,v.data) for k,v in net.blobs.items()]
來查看各層的數據。注意和上面查看參數的區別,一個是net.params, 一個是net.blobs.
實際上數據剛輸入的時候,我們叫圖片數據,卷積之后我們就叫特征了。
如果要抽取第一個全連接層的特征,則可用命令:
fea=net.blobs['InnerProduct1'].data
只要知道某個層的名稱,就可以抽取這個層的特征。
推薦大家在spyder中,運行一下上面的所有代碼,深入理解模型各層。
最后,總結一個代碼:
import caffe
import numpy as np
root='/home/xxx/' #根目錄
deploy=root + 'mnist/deploy.prototxt' #deploy文件
caffe_model=root + 'mnist/lenet_iter_9380.caffemodel' #訓練好的 caffemodel
net = caffe.Net(deploy,caffe_model,caffe.TEST) #加載model和network
[(k,v[0].data.shape) for k,v in net.params.items()] #查看各層參數規模
w1=net.params['Convolution1'][0].data #提取參數w
b1=net.params['Convolution1'][1].data #提取參數b
net.forward() #運行測試
[(k,v.data.shape) for k,v in net.blobs.items()] #查看各層數據規模
fea=net.blobs['InnerProduct1'].data #提取某層數據(特征)
原文鏈接:https://www.cnblogs.com/denny402/p/5686257.html
相關推薦
- 2022-10-17 Python?Django源碼運行過程解析_python
- 2023-05-23 docker-compose統一管理多個容器使用詳解_docker
- 2023-10-30 docker拉取鏡像時報錯Error response from daemon: Head ““no
- 2022-11-25 Python?Playwright的使用詳解_python
- 2022-06-28 C#二分查找算法_C#教程
- 2022-04-18 numpy中np.nanmax和np.max的區別及坑_python
- 2022-05-18 C語言模擬內存函數分析之mencpy與memmove_C 語言
- 2022-07-28 Redis基本數據類型Zset有序集合常用操作_Redis
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支