百度深度學習 卷積運算元的應用(一)

2021-10-04 23:26:57 字數 3113 閱讀 2590

下面介紹卷積運算元在中應用的三個案例,並觀察其計算結果。

案例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...