易错易忘收集

Numpy

 axis=0为列方向

 axis=1为行方向

在axis方向上求(压缩哪一个axis)。。。

subplot是水平计数(1,2,3,4,5,6)

b[None,:,None,None]:b本来是一维的,现在可编程4维。


x: Integer array of shape (N, T) giving indices of words,其中每一个元素均有 0 <= idx < V

W: Weight matrix of shape (V, D) giving word vectors for all words.

则W[x]:(N,T,D),x中每一个元素作为W的行索引,得到一个行向量。

>>> a = np.array([1, 2, 3, 4])

>>> b = np.array([1, 2])

>>> np.add.at(a, [0, 1], b)   #array([2, 4, 3, 4])


verbose=True才打印


[:,:,None,None]作用是添加维数

各种相乘:https://blog.csdn.net/zenghaitao0128/article/details/78715140

不能是tuple

np.random.randn(10, 10)  

必须是tuple

np.zeros((2,3))【为shape】

可以是tuple,也可以不是

np.reshape()

*相当于瓦解tuple

np.prod: 计算给定axis 的相应向量元素的乘积

 imresize(puppy, (img_size, img_size)).transpose((2, 0, 1)) 对于一幅图片,CNN需要的是C*H*W,而imread是H*W*C,则需要对axis顺序进行转换。

np.max:(a, axis=None, out=None, keepdims=False)求序列的最值,最少接收一个参数,axis:默认为列向(也即 axis=0),axis = 1 时为行方向的最值;keepdims若为true这保证了输出结果与输入具有相同的dim

np.maximum:(X, Y, out=None),X 与 Y 逐位比较取其大者;最少接收两个参数

numpy.where(condition[, xy])。一般使用时,返回的时tuple



numpy.sum 参数keepdims用于:一般地,当输入时二维的时候,结果是二维的而不是一维的。

content_array[:,:,:,::-1],content_array有4维,前3维不动,第四维元素顺序颠倒

np.linalg.norm()各种距离

np.bincount(np.array([0, 1, 1, 3, 2, 1, 7]))array([1, 3, 1, 1, 0, 0, 0, 1], dtype=int32) # 分别统计0-7分别出现的次数

X_train_folds = np.array_split(X_train, num_folds)

np.array_split()&np.split():https://blog.csdn.net/m0_37393514/article/details/79537639

np.vstack与np.hstack

plt.scatter([k]*len(accuracies),accuracies),其中[k]重复len(accuracies)次

np.random.choice(num_training, num_dev,replace=False)

random.randrange(6)  含义为0-5随机选

enumerate() 

遍历dict:for k, v in list(data.items()):

np.prod()所有元素乘积,同时可以设置axis计算某方向上的乘积

np.linspace(-0.1, 0.5,5)  5代表有5个,且结果包含左右边界。结果为array([-0.1 , 0.05, 0.2 , 0.35, 0.5 ])

np.all()  判断所有的元素是否全为true

np.tolist() 与np.array()是互操作

np.array(A),对A进行的复制操作,np.asarray()没有复制操作。




1、range多用作循环,range(0,10)返回一个range对象,如想返回一个list,前面加上list转换;

2、np.arange是numpy模块中的函数,使用前需要先导入此模块,arange(3):返回array类型对象。

【注:range()中的步长不能为小数,但是np.arange()中的步长可以为小数

3、xrange()也是用作循环,只是xrang(0,10)不返回list,返回xrange对象。每次调用返回其中的一个值。 但是好像xrange现在不能使用了。

返回很大的数的时候或者频繁的需要break时候,xrange性能更好。

np.random.randint(C,size=(N,))


scores[np.arange(num_train), y] ,np.arange(num_train)与y均是数组,则选择出scores的第i行第j列的元素(i,j分别为两数组里面的元素)

/代表浮点数相除,//代表整数相除。

为dict设置默认值:

if configis None: config = {}

config.setdefault('learning_rate',1e-2)

[0.5] *3代表[0.5,0.5,0.5]


lambda函数

f =lambda w: svm_loss_naive(w, X_dev, y_dev,1e2)[0]

在python3中,5/2=0.25,5//2=2


a=np.array([[1,2],[3,4]])

a[0]为 array([1, 2])【第0行】,其实联想一下Java的数组就明白了。

方法1.用List的成员函数sort进行排序,在本地进行排序,不返回副本

方法2.用built-in函数sorted进行排序(从2.4开始),返回副本,原始输入不变

np.clip(255 * img,0.0,255.0).astype(np.uint8)  可对变量的数值范围进行规范。此处还转化为可直接imshow的格式。




svm中展示权重图片

w=best_svm.W[:-1,:]

w=w.reshape((32,32,3,10))

w_min,w_max=np.min(w),np.max(w)

classes = ['plane','car','bird','cat','deer','dog','frog','horse','ship','truck']

for i in range(10):

    plt.subplot(2,5,i+1)

    wimg=255.0*(w[:,:,:,i].squeeze()-w_min)/(w_max - w_min)

    plt.imshow(wimg.astype('uint8'))

    plt.axis('off')

    plt.title(classes[i])


plt.imshow(visualize_grid(W1,padding=3).asty('uint8'))


上图中,好像首先计算-1为50,然后分别按照50,3,32,32的顺序进行reshape


astype('uint8')的结果

dW = np.zeros_like(W)

np.zeros((3,2)),里面的()不能去掉

replace = True 在一次抽取中,抽取的样本可重复出现。 

即:np.random.choice(6, 2, replace=True) 

可得,array( [4, 4] ) 

replace = False 再一次抽取中,抽样的样本不可重复出现。 

即:np.random.choice(6, 2, replace=True) 

a.reshape(N,1):返回一个N*1维的ndarray,并不会改变a的大小。

.resize(shape) : 与.reshape()功能一致,但修改原数组

exp_sum = np.sum(A,axis=1).reshape(N,1)

A是一个矩阵,则np.sum(A,axis=1)的结果为一个数组(一行,此处仍然想想数组即可理解),但是我需要列向量,此时就需要reshape(N,1)^_^

flags=['multi_index']表示对a进行多重索引。op_flags=['readwrite']表示不仅可以对a进行read(读取),还可以write(写入),

it = np.nditer(x,flags=['multi_index'],op_flags=['readwrite'])

while not it.finished:

       ix = it.multi_index

        it.iternext()

则每个ix是一个tuple (),如下图:


在验证net梯度的正确性时,eval_numerical_gradient对net.params[param_name]进行修改时,是直接在net上的修改,所以lambda的参数没有意义,写任何字母均可。

for param_namein grads:

    f =lambda WWWW: net.loss(X, y,reg=0.1)[0]

    param_grad_num = eval_numerical_gradient(f, net.params[param_name],verbose=False)

im.ndim:输出维度

np.dot(rgb[...,:3], [0.299,0.587,0.144]) 将rgb转化为灰度图像,但是并不理解rgb[...,:3]的意思。


对于dict:

bn_param.get('eps',1e-5),若不存在eps,则默认为1e-5

config.setdefault('learning_rate',1e-2)  设置默认值


np.logspace(-4,0,20)  代表了1e-4到1e0的等比数列,(包含边界),共20个数。

tf.nn.conv2(padding='VALID'): 长度为ceil((H-F+1)/S) 

tf.nn.conv2(padding='SAME'): 长度为ceil(H/S) 

因此padding需要加入的0的行数计算如下:

new_height = new_width = ceil(W / S) (结果向上取整)

在高度上需要pad的像素数为

pad_needed_height = (new_height – 1)  × S + F - W

根据上式,输入矩阵上方添加的像素数为

pad_top = pad_needed_height // 2  (结果取整

下方添加的像素数为

pad_down = pad_needed_height - pad_top


pycharm 软件注意事项

1. 我将f1设置为运行当前行和运行选中部分了,但是发现一个问题:该文件引用了另外一个文件B,在文件B中修改了程序,再运行调用B程序,发现竟然不能影响f1的运行结果:发现可能因为python console自动对调用函数进行了优化:发现重复导入同一函数,就不再重新导入,而是采用前一版本的函数,因此,修改程序没有改变其结果。解决方法是,每一次点击f1运行前,都要点击下述按钮(重启)。如果点击运行或者调试,则没有该问题。

RNN


RNN,词向量,输出,sample关系图


print

(1). %字符:标记转换说明符的开始

(2). 转换标志:-表示左对齐;+表示在转换值之前要加上正负号;“”(空白字符)表示正数之前保留空格;0表示转换值若位数不够则用0填充

(3). 最小字段宽度:转换后的字符串至少应该具有该值指定的宽度。如果是*,则宽度会从值元组中读出。

(4). 点(.)后跟精度值:如果转换的是实数,精度值就表示出现在小数点后的位数。如果转换的是字符串,那么该数字就表示最大字段宽度。如果是*,那么精度将从元组中读出

(5).字符串格式化转换类型

转换类型          含义

d,i                 带符号的十进制整数

o                   不带符号的八进制

u                   不带符号的十进制

x                    不带符号的十六进制(小写)

X                   不带符号的十六进制(大写)

e                   科学计数法表示的浮点数(小写)

E                   科学计数法表示的浮点数(大写)

f,F                 十进制浮点数

g                   如果指数大于-4或者小于精度值则和e相同,其他情况和f相同

G                  如果指数大于-4或者小于精度值则和E相同,其他情况和F相同

C                  单字符(接受整数或者单字符字符串)

r                    字符串(使用repr转换任意python对象)

s                   字符串(使用str转换任意python对象)



>>> pi =3.141592653  

>>>print('%10.3f' % pi)#字段宽10,精度3  

3.142  

>>>print("pi = %.*f" % (3,pi))#用*从后面的元组中读取字段宽度或精度  

pi =3.142  

>>>print('%010.3f' % pi)#用0填充空白  

000003.142  

>>>print('%-10.3f' % pi)#左对齐  

3.142       

>>>print('%+f' % pi)#显示正负号  

+3.141593  


优雅写

函数参数介绍:

'''

:param train_dir: 训练data所在文件夹

'''

TODO:

# TODO: 巴啦啦

推荐阅读更多精彩内容

  • 基础篇NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(...
    oyan99阅读 3,726评论 0 19
  • 删掉重新来一次吧,记得改那个脚本修改 /home/ubuntu/eos/scripts/install_depen...
    卢衍泓阅读 319评论 0 1
  • numpy.random.randint Return random integers fromlow(inclu...
    onepedalo阅读 618评论 0 1
  • 前些时间撒的花种已经开始冒出几片叶子了,窗外的一树树桃花开得灼灼绚烂,几场雨点落下来,一切似乎是在往很好的方向开始...
    发呆的音乐台阅读 144评论 0 0
  • 我跟他认识那是在去年的12月份,那时暗恋无果学习道路茫然.没有任何目标如同行尸走肉.后来,偶然的一次在网上认识...
    蒋Cc_阅读 93评论 3 2