看了下cs231n的作业,有些函数,求导公式不知道,搜了博文记一下
1 X.reshape(X.shape[0], -1)
X.reshape(X.shape[0], -1)可以将一个维度为(a,b,c,d)的矩阵转换为一个维度为(a, b∗c∗d,)的矩阵
X.shape
(209, 64, 64, 3)
#我们假设x的shape是(209, 64, 64, 3)的。
X.shape[0]
209
X.reshape(X.shape[0], -1)
(209, 64*64*3)
通过reshape重新建立维度,第一个维度就是X.shape[0],这就是正常的reshape操作;第二个维度是-1,我们知道X的shape属性是多少,是(209, 64, 64, 3),但是想让X变成209行,列数不知道是多少,所以也就是209 * 64 * 64 * 3 / 209,也就是64 * 64 * 3。
总结一下,参数-1就是不知道行数或者列数多少的情况下使用的参数,所以先确定除了参数-1之外的其他参数,然后通过(总参数的计算) / (确定除了参数-1之外的其他参数) = 该位置应该是多少的参数。
2 plt.imshow()
plt.imshow()函数负责对图像进行处理,并显示其格式,但是不能显示。
其后跟着plt.show()才能显示出来。
3 numpy.bincount
import numpy as np
y = np.bincount([3,4,7,3,8,4])
print(y)
打印y结果:[0 0 0 2 2 0 0 1 1]
那么,返回结果应该是含有九个数字(0-8共九个数字)的列表:代表原列表中0-8共9个数字出现的次数
结合原列表具体看:
[0 0 0 2 2 0 0 1 1]中,
第一个元素0,代表[3,4,7,3,8,4]中,0出现了0次
第二个元素0,代表[3,4,7,3,8,4]中,1出现了0次
第三个元素0,代表[3,4,7,3,8,4]中,2出现了0次
第四个元素2,代表[3,4,7,3,8,4]中,3出现了2次
第五个元素2,代表[3,4,7,3,8,4]中,4出现了2次
......
第九个元素1,代表[3,4,7,3,8,4]中,8出现了1次
4 np.linalg.norm(a)
默认参数(矩阵整体元素平方和开根号,不保留矩阵二维特性)
5 np.sum(X,axis=1,keepdims=True)
keepdims=True,保持矩阵的二维特性
import numpy as np
a = np.array([[1,2],[3,4]])
# 按行相加,并且保持其二维特性
print(np.sum(a, axis=1, keepdims=True))
# 按行相加,不保持其二维特性
print(np.sum(a, axis=1))
输出
array([[3], [7]])
array([3, 7])
6 numpy array_split
可不均等划分数据,np.array_split(x, n),x原数据,n划分成几分
x = np.arange(8.0)
np.array_split(x, 3)
#[array([ 0., 1., 2.]), array([ 3., 4., 5.]), array([ 6., 7.])]
7 pop
pop方法用来获得对应于给定键的值,然后将这个键-值对从字典中移除
x = {'a':1,'b':2}
x.pop('a')
1
x
{'b': 2}
8 np.vstack()函数
函数原型:vstack(tup) ,参数tup可以是元组,列表,或者numpy数组,返回结果为numpy的数组
9 list()
range(2)表示range(0,2),即0,1,
y为0,1
range(0,2)和list(y)中数目相对应,共同决定矩阵a的下标
(0,0)和(1,1),第0行0列,第1行1列
>>> a
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11]])
>>> y=np.arange(2)
>>> y
array([0, 1])
>>> a[range(2),list(y)]
array([0, 7])
10 np.random.choice
def choice(a, size=None, replace=True, p=None)
表示从a中随机选取size个数
replacement 代表的意思是抽样之后还放不放回去,如果是False的话,那么通一次挑选出来的数都不一样,如果是True的话, 有可能会出现重复的,因为前面的抽的放回去了。
p表示每个元素被抽取的概率,如果没有指定,a中所有元素被选取的概率是相等的。
svm求导
softmax求导
来源:搜索查找