鱼书初级学习笔记

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]]
posted @ 2021-01-05 21:37  小菜菜最菜  阅读(116)  评论(0编辑  收藏  举报