cs231n 部分代码解释

由于记性不大好,所以还是边学习边整理吧

dropout(随机失活) p值更高 = 随机失活更弱

# -*-coding:utf-8-*-   **#添加这一句话,可以是pycharm打印出来中文**
import numpy as np
import random
import matplotlib.pyplot as plt

p = 0.1

h1 = np.array([[1,1.25,2.87],[2,0.36,0.24]])
u1 = np.random.rand(*h1.shape) < p 
#每一个神经元随机失活的概率,这里是0.1的话说明失活的概率是0.9,False的概率变高
#这里使用×h.shape是因为rand里面只能输入整数,×就转化为integer
print u1

打印结果:(可以明显的看出来False概率比较高,因为设置是0.1,所以False概率是0.9;如果设置为0.9,那么True概率是0.1)
第一次
[[False False True]
[False False False]]
第二次
[[False False True]
[False False False]]
第三次
[[False False False]
[False False False]]

如果使用随机失活,那么predict函数中激活函数必须乘以p

def predict(X):
  # 前向传播时模型集成
  H1 = np.maximum(0, np.dot(W1, X) + b1) * p # 注意:激活数据要乘以p
  H2 = np.maximum(0, np.dot(W2, H1) + b2) * p # 注意:激活数据要乘以p
  out = np.dot(W3, H2) + b3

反向随机失活(inverted dropout),它是在训练时就进行数值范围调整,从而让前向传播在测试时保持不变。-----效果好

反向随机失活
U1 = (np.random.rand(*H1.shape) < p) / p # 第一个随机失活遮罩. 注意/p!

def predict(X):
  # 前向传播时模型集成
  H1 = np.maximum(0, np.dot(W1, X) + b1) # 不用数值范围调整了
  H2 = np.maximum(0, np.dot(W2, H1) + b2)
  out = np.dot(W3, H2) + b3
预测函数

你可能感兴趣的:(小白,Python学习)