下面介紹卷積運算元在中應用的三個案例,並觀察其計算結果。
案例1——簡單的黑白邊界檢測
下面是使用conv2d運算元完成乙個影象邊界檢測的任務。影象左邊為光亮部分,右邊為黑暗部分,需要檢測出光亮跟黑暗的分界處。
可以設定寬度方向的卷積核為[1,
0,−1
][1, 0, -1]
[1,0,−
1],此卷積核會將寬度方向間隔為1的兩個畫素點的數值相減。當卷積核在上滑動的時候,如果它所覆蓋的畫素點位於亮度相同的區域,則左右間隔為1的兩個畫素點數值的差為0。只有當卷積核覆蓋的畫素點有的處於光亮區域,有的處在黑暗區域時,左右間隔為1的兩個點畫素值的差才不為0。將此卷積核作用到上,輸出特徵圖上只有對應黑白分界線的地方畫素值才不為0。具體**如下所示,結果輸出在下方的圖案中。
import matplotlib.pyplot as plt
import numpy as np
import paddle
import paddle.fluid as fluid
from paddle.fluid.dygraph import conv2d
from paddle.fluid.initializer import numpyarrayinitializer
%matplotlib inline
with fluid.dygraph.guard():
# 建立初始化權重引數w
w = np.array([1
,0,-
1], dtype=
'float32'
)# 將權重引數調整成維度為[cout, cin, kh, kw]的四維張量
w = w.reshape([1
,1,1
,3])
# 建立卷積運算元,設定輸出通道數,卷積核大小,和初始化權重引數
# filter_size = [1, 3]表示kh = 1, kw=3
# 建立卷積運算元的時候,通過引數屬性param_attr,指定引數初始化方式
# 這裡的初始化方式時,從numpy.ndarray初始化卷積引數
# num_channels=1輸入影象的通道數為1(表示為灰度圖)
# num_filters=1,表示只有乙個卷積核,每張都是使用相同的卷積核進行計算,
conv = conv2d(num_channels=
1, num_filters=
1, filter_size=[1
,3],
param_attr=fluid.paramattr(initializer=numpyarrayinitializer(value=w)))
# 建立輸入,左邊的畫素點取值為1,右邊的畫素點取值為0
img = np.ones([50
,50], dtype=
'float32'
) img[:,
30:]=
0.# 將形狀調整為[n, c, h, w]的形式,n輸入幾張,c的輸入通道數(灰度圖為1)
x = img.reshape([1
,1,50
,50])
# 將numpy.ndarray轉化成paddle中的tensor
x = fluid.dygraph.to_variable(x)
# 使用卷積運算元作用在輸入上
y = conv(x)
out = y.numpy(
)
f = plt.subplot(
121)
f.set_title(
'input image'
, fontsize=15)
plt.imshow(img, cmap=
'gray'
)f = plt.subplot(
122)
f.set_title(
'output featuremap'
, fontsize=15)
# 卷積運算元conv2d輸出資料形狀為[n, c, h, w]形式
# 此處n, c=1,輸出資料形狀為[1, 1, h, w],是4維陣列
# 但是畫圖函式plt.imshow畫灰度圖時,只接受2維陣列
# 通過numpy.squeeze函式將大小為1的維度消除
plt.imshow(out.squeeze(
), cmap=
'gray'
)plt.show(
)
執行結果
# 檢視卷積層引數
with fluid.dygraph.guard():
# 通過 conv.parameters()檢視卷積層的引數,返回值是list,包含兩個元素,乙個是權重引數,乙個是偏置引數
print
(conv.parameters())
# 檢視卷積層的權重引數名字和數值
print
(conv.parameters()[
0].name, conv.parameters()[
0].numpy())
# 參看卷積層的偏置引數名字和數值
print
(conv.parameters()[
1].name, conv.parameters()[
1].numpy(
))
列印結果
[name conv2d_0.w_0, dtype: vartype.fp32 shape: [1, 1, 1, 3] lod: {}
dim: 1, 1, 1, 3
layout: nchw
dtype: float
data: [1 0 -1]
, name conv2d_0.b_0, dtype: vartype.fp32 shape: [1] lod: {}
dim: 1
layout: nchw
dtype: float
data: [0]
]conv2d_0.w_0 [[[[ 1. 0. -1.]]]]
conv2d_0.b_0 [0.]
參加百度深度學習培訓總結
總結這部分提交乙個aistudio平台的公開專案,通過修改部分 實現了乙個水下海珍品目標檢測的案例,由於是初學者,效果不夠理想,請大佬輕噴。所採用的資料集來自 全國水下機械人大賽 官方資料 結果展示 將多張結果製作成gif,不是網圖 上述內容可能表述的比較簡單,不是那麼的全面,真的希望各位看官關注一...
百度深度學習開源平台 PaddlePaddle
谷歌 tensorflow 專案負責人 rajat monga 谷歌 tensorflow 專案負責人 rajat monga 接受了 採訪,他談到了目前 tensorflow 的進展情況,以及目前在中國的影響力。tensorflow 是谷歌基於 distbelief 進行研發的第二代人工智慧深度學...
參加百度深度學習峰會的雜談
總結接觸機器學習還是比較早的,大概在17年就知道有kaggle這玩意,混進了乙個美國的資料分析團隊,slack辦公。然並卵,自己有多水還是有點b數的,之後就一直搞lot去了。直到19年在谷歌開發者大會上,某某老哥說tf2馬上就要推出,目標是讓更多開發者受惠,乙個月即可掌握tf2,然並卵,paddle...