前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >再谈强大的Numpy

再谈强大的Numpy

作者头像
公众号guangcity
发布2019-09-20 13:00:24
4190
发布2019-09-20 13:00:24
举报
文章被收录于专栏:光城(guangcity)光城(guangcity)

Cs231n之features及numpy

0.说在前面1.numpy3.features4.作者的话

0.说在前面

今天发现cs231n还差一个features.py未更新,特更,并且更新中间穿插的numpy使用!

1.numpy

取指定位置的精度

In

代码语言:javascript
复制
np.around([-0.6,1.2798,2.357,9.67,13], decimals=0)

Out

看到没,负数进位取绝对值大的!

代码语言:javascript
复制
array([-1.,  1.,  2., 10., 13.])

In

代码语言:javascript
复制
np.around([1.2798,2.357,9.67,13], decimals=1)

Out

代码语言:javascript
复制
array([ 1.3,  2.4,  9.7, 13. ])

In

代码语言:javascript
复制
np.around([1.2798,2.357,9.67,13], decimals=2)

Out

代码语言:javascript
复制
array([ 1.28,  2.36,  9.67, 13.  ])

从上面可以看出,decimals表示指定保留有效数的位数,当超过5就会进位(此时包含5)!

但是,如果这个参数设置为负数,又表示什么?

In

代码语言:javascript
复制
np.around([1,2,5,6,56], decimals=-1)

Out

代码语言:javascript
复制
array([ 0,  0,  0, 10, 60])

发现没,当超过5时候(不包含5),才会进位!-1表示看一位数进位即可,那么如果改为-2呢,那就得看两位!

例如:

In

代码语言:javascript
复制
np.around([1,2,5,50,56,190], decimals=-2)

Out

代码语言:javascript
复制
array([  0,   0,   0,   0, 100, 200])

看到没,必须看两位,超过50才会进位,190的话,就看后面两位,后两位90超过50,进位,那么为200!

计算沿指定轴第N维的离散差值

In

代码语言:javascript
复制
x = np.arange(1 , 16).reshape((3 , 5))

Out

代码语言:javascript
复制
array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10],
       [11, 12, 13, 14, 15]])

In

代码语言:javascript
复制
np.diff(x,axis=1) #默认axis=1

Out

代码语言:javascript
复制
array([[1, 1, 1, 1],
       [1, 1, 1, 1],
       [1, 1, 1, 1]])

In

代码语言:javascript
复制
np.diff(x,axis=0) 

Out

代码语言:javascript
复制
array([[5, 5, 5, 5, 5],
       [5, 5, 5, 5, 5]])

取整

In

代码语言:javascript
复制
np.floor([-0.6,-1.4,-0.1,-1.8,0,1.4,1.7])

Out

代码语言:javascript
复制
array([-1., -2., -1., -2.,  0.,  1.,  1.])

看到没,负数取整,跟上述的around一样,是向左!

取上限

代码语言:javascript
复制
np.ceil([1.2,1.5,1.8,2.1,2.0,-0.5,-0.6,-0.3])

取上限!找这个小数的最大整数即可!

查找

利用np.where实现小于0的值用0填充吗,大于0的数不变!

In

代码语言:javascript
复制
x = np.array([[1, 0],
       [2, -2],
     [-2, 1]])

Out

代码语言:javascript
复制
array([[ 1,  0],
       [ 2, -2],
       [-2,  1]])

In

代码语言:javascript
复制
np.where(x>0,x,0)

Out

代码语言:javascript
复制
array([[1, 0],
       [2, 0],
       [0, 1]])

3.features

svm

代码语言:javascript
复制
iters = 6000
svm = LinearSVM()
for i in learning_rates:
    for j in regularization_strengths:
        svm.train(X_train_feats,y_train,learning_rate=i,reg=j,num_iters=iters)
        y_train_pred = svm.predict(X_train_feats)
        accu_train = np.mean(y_train == y_train_pred)
        y_val_pred = svm.predict(X_val_feats)
        accu_val = np.mean(y_val == y_val_pred)
        results[(i, j)] = (accu_train, accu_val)

        if best_val < accu_val:
            best_val = accu_val
            best_svm = svm

neural network

代码语言:javascript
复制
results = {}
best_val = -1
best_net = None

learning_rates = [1e-2 ,1e-1, 5e-1, 1, 5]
regularization_strengths = [1e-3, 5e-3, 1e-2, 1e-1, 0.5, 1]

for lr in learning_rates:
    for reg in regularization_strengths:
        net = TwoLayerNet(input_dim, hidden_dim, num_classes)
        # Train the network
        stats = net.train(X_train_feats, y_train, X_val_feats, y_val,
        num_iters=1500, batch_size=200,
        learning_rate=lr, learning_rate_decay=0.95,
        reg= reg, verbose=False)
        val_acc = (net.predict(X_val_feats) == y_val).mean()
        if val_acc > best_val:
            best_val = val_acc
            best_net = net         
        results[(lr,reg)] = val_acc

对比上述两者方法,发现代码差不多,其实就是调参!!!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 光城 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Cs231n之features及numpy
    • 0.说在前面
      • 1.numpy
        • 3.features
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档