1. 感知机和神经元的比较
不同点:感知机中流动的只能是0或1信号,而神经元中流动的是连续的实数值信号(阶跃函数和sigmoid函数,均是非线性函数)。
相同点:输入的信号越小,输出信号越接近0,输入的信号越大,输出的信号越接近1,输出的信号在0-1之间。
2. im2col函数
def im2col(input_data, filter_h, filter_w, stride=1, pad=0):
"""
Parameters
----------
input_data : 由(数据量, 通道, 高, 长)的4维数组构成的输入数据
filter_h : 卷积核的高
filter_w : 卷积核的长
stride : 步幅
pad : 填充
Returns
-------
col : 2维数组
"""
# 输入数据的形状
# N:批数目,C:通道数,H:输入数据高,W:输入数据长
N, C, H, W = input_data.shape
out_h = (H + 2*pad - filter_h)//stride + 1 # 输出数据的高
out_w = (W + 2*pad - filter_w)//stride + 1 # 输出数据的长
# 填充 H,W
img = np.pad(input_data, [(0,0), (0,0), (pad, pad), (pad, pad)], 'constant')
# (N, C, filter_h, filter_w, out_h, out_w)的0矩阵
col = np.zeros((N, C, filter_h, filter_w, out_h, out_w))
for y in range(filter_h):
y_max = y + stride*out_h
for x in range(filter_w):
x_max = x + stride*out_w
col[:, :, y, x, :, :] = img[:, :, y:y_max:stride, x:x_max:stride]
# 按(0, 4, 5, 1, 2, 3)顺序,交换col的列,然后改变形状
col = col.transpose(0, 4, 5, 1, 2, 3).reshape(N*out_h*out_w, -1)
return col
import sys,os
sys.path.append(os.pardir)
x1 = np.random.rand(1,3,5,5)
print(x1)
[[[[0.39906607 0.69938209 0.59171303 0.468406 0.46675132]
[0.77753727 0.44925231 0.22105801 0.35117425 0.0497251 ]
[0.39079804 0.74720362 0.35406528 0.40746943 0.63856242]
[0.77393206 0.18658462 0.66966324 0.67289867 0.84813232]
[0.18346945 0.662958 0.09471252 0.12607397 0.74529671]]
[[0.77488997 0.61426808 0.69190822 0.88215239 0.4397761 ]
[0.69099156 0.14725386 0.36411181 0.20350791 0.32109713]
[0.3825959 0.00946471 0.03664586 0.86738054 0.56845658]
[0.62861975 0.48352488 0.71966828 0.70285641 0.15258299]
[0.83992643 0.25291423 0.72544312 0.70858671 0.93213547]]
[[0.80501398 0.70382509 0.13388217 0.79333062 0.73382662]
[0.60350564 0.75870046 0.37966041 0.82520865 0.86977478]
[0.1097968 0.068448 0.56369 0.2317281 0.15309575]
[0.83450657 0.35369833 0.48877413 0.13752027 0.72475119]
[0.96570697 0.68866113 0.51738769 0.64353873 0.03185289]]]]
coll = im2col(x1,2,2,stride=1,pad=0)
print(coll.shape)
print(coll)
# 按照卷积核,每次横向展开
# 第一次
# [0.39906607 0.69938209]
# [0.77753727 0.44925231]
# im2col展开后
# 0.39906607 0.69938209 0.77753727 0.44925231
# 同行拼接的是下一个通道同样位置的数据
(16, 12)
[[0.39906607 0.69938209 0.77753727 0.44925231 0.77488997 0.61426808
0.69099156 0.14725386 0.80501398 0.70382509 0.60350564 0.75870046]
[0.69938209 0.59171303 0.44925231 0.22105801 0.61426808 0.69190822
0.14725386 0.36411181 0.70382509 0.13388217 0.75870046 0.37966041]
[0.59171303 0.468406 0.22105801 0.35117425 0.69190822 0.88215239
0.36411181 0.20350791 0.13388217 0.79333062 0.37966041 0.82520865]
[0.468406 0.46675132 0.35117425 0.0497251 0.88215239 0.4397761
0.20350791 0.32109713 0.79333062 0.73382662 0.82520865 0.86977478]
[0.77753727 0.44925231 0.39079804 0.74720362 0.69099156 0.14725386
0.3825959 0.00946471 0.60350564 0.75870046 0.1097968 0.068448 ]
[0.44925231 0.22105801 0.74720362 0.35406528 0.14725386 0.36411181
0.00946471 0.03664586 0.75870046 0.37966041 0.068448 0.56369 ]
[0.22105801 0.35117425 0.35406528 0.40746943 0.36411181 0.20350791
0.03664586 0.86738054 0.37966041 0.82520865 0.56369 0.2317281 ]
[0.35117425 0.0497251 0.40746943 0.63856242 0.20350791 0.32109713
0.86738054 0.56845658 0.82520865 0.86977478 0.2317281 0.15309575]
[0.39079804 0.74720362 0.77393206 0.18658462 0.3825959 0.00946471
0.62861975 0.48352488 0.1097968 0.068448 0.83450657 0.35369833]
[0.74720362 0.35406528 0.18658462 0.66966324 0.00946471 0.03664586
0.48352488 0.71966828 0.068448 0.56369 0.35369833 0.48877413]
[0.35406528 0.40746943 0.66966324 0.67289867 0.03664586 0.86738054
0.71966828 0.70285641 0.56369 0.2317281 0.48877413 0.13752027]
[0.40746943 0.63856242 0.67289867 0.84813232 0.86738054 0.56845658
0.70285641 0.15258299 0.2317281 0.15309575 0.13752027 0.72475119]
[0.77393206 0.18658462 0.18346945 0.662958 0.62861975 0.48352488
0.83992643 0.25291423 0.83450657 0.35369833 0.96570697 0.68866113]
[0.18658462 0.66966324 0.662958 0.09471252 0.48352488 0.71966828
0.25291423 0.72544312 0.35369833 0.48877413 0.68866113 0.51738769]
[0.66966324 0.67289867 0.09471252 0.12607397 0.71966828 0.70285641
0.72544312 0.70858671 0.48877413 0.13752027 0.51738769 0.64353873]
[0.67289867 0.84813232 0.12607397 0.74529671 0.70285641 0.15258299
0.70858671 0.93213547 0.13752027 0.72475119 0.64353873 0.03185289]]