神经网络
入门阅读资料:
理解正向传播:神经网络15分钟入门!足够通俗易懂了吧 - 知乎
理解反向传播:神经网络15分钟入门!——反向传播到底是怎么传播的? - 知乎
反向传播是固定X然后从末端传回去,根据神经元特性构造一个函数,在这个函数里使用优化算法优化W矩阵和b向量(在反向传播的时候,它们是作为变量的)用类似梯度下降算法来找到使得错误项最小的W和b。
动手撸一个小神经网络:神经网络15分钟入门!使用python从零开始写一个两层神经网络 - 知乎
反向传播的时候对维度进行了还原,举例子说也就是从dout的N*4——》原来w的维度
Python知识补充:
如何使用元组:
四、Python的元组_zhaopeng01zp的博客-CSDN博客_python元组有几个元素
如何使用numpy的sum函数:
python 中 np.sum()函数 通俗易懂理解!_rifengxxc的博客-CSDN博客_np.sum python
这个链接里详细解释了axis的用法,axis = 某个轴也可以理解为移除某个轴,等于把某个轴上的数据“拍扁”,也就是求和,这样比较好理解,举个例子:
>>> import numpy as np
>>> a = np.array([[[1,2,3,2],[1,2,3,1],[2,3,4,1]],[[1,0,2,0],[2,1,2,0],[2,1,1,1]]])
>>> a
array([[[1, 2, 3, 2],
[1, 2, 3, 1],
[2, 3, 4, 1]],
[[1, 0, 2, 0],
[2, 1, 2, 0],
[2, 1, 1, 1]]])
# output为:
>>> a.sum(axis=0)
array([[2, 2, 5, 2],
[3, 3, 5, 1],
[4, 4, 5, 2]])
# 相当于把axis = 0给拍扁了,于是就相当于两个矩阵相乘,如果axis = 1,输出结果为
>>> a.sum(axis=1)
array([[ 4, 7, 10, 4],
[ 5, 2, 5, 1]])
# 可以看出,axis = 1被拍扁了,于是就相当于进行了列求和
import numpy as np
a = np.array([[1, 2, 3, 2],
[1, 2, 3, 1],
[2, 3, 4, 1]])
b = np.sum(a, axis=0)
print(b) # [4, 7, 10, 4]
# 对于单个矩阵来说,axis=0 就是列求和
b = np.sum(a, axis=1)
print(b) # [8, 7, 10]
# 对于单个矩阵来说,axis=1 就是行求和
# dimension 由排除掉axis的那个元素以后决定
当keepdim = True时
import numpy as np
a = np.array([[1, 2, 3, 2],
[1, 2, 3, 1],
[2, 3, 4, 1]])
b = np.sum(a, axis=0, keepdims=True)
print(b) # [[4, 7, 10, 4]]
# 对于单个矩阵来说,axis=0 就是列求和
b = np.sum(a, axis=1, keepdims=True)
print(b) # [[8],
# [7],
# [10]]
# 对于单个矩阵来说,axis=1 就是行求和
# dimension 由排除掉axis的那个元素以后决定
numpy max 也可以用一样的原理:
array1= [[0 1 2 3]
[4 5 6 7]
[8 9 10 11]]
array1[0, :] = [0 1 2 3]
array1[1, :] = [4 5 6 7]
array1[2, :] = [8 9 10 11]
np.max(array1, axis=0) = [8 9 10 11]
array1[:, 0] = [0 4 8]
array1[:, 1] = [1 5 9]
array1[:, 2] = [2 6 10]
array1[:, 3] = [3 7 11]
np.max(array1, axis=1) = [3 7 11]
np.maximum和np.max是不一样的:
a = np.array([[-1, 2, 3, 2],
[1, 2, 3, 1],
[2, -1, 4, 1]])
b = np.maximum(0, a)
print(b)
# max 函数输出:[[0 2 3 2]
# [1 2 3 1]
# [2 0 4 1]]
是把小于前面那个数字的数全部替换成那个数