預處理:將各個畫素值除以255,進行了簡單的正則化。
考慮打包輸入多張影象情形,使用predict()一次性打包處理100張影象
x形狀:100*784
for i inrange(0,len(x),batch_size):
x_batch=x[i:i+batch_size] #
通過x[i:i+batch_size]從輸入資料中抽出批資料
y_batch=predict(network,x_batch)
p=np.argmax(y_batch,axis=1) #
通過argmax()獲取值最大的元素索引
accuracy_cnt+=np.sum(p==t[i:i+batch_size])
range():指定為range(start,end),生成乙個由start到end-1之間的整數構成的列表
使用for語句逐一取出儲存在x中的影象資料通過predict()函式進行分類。predict函式以numpy陣列的形式輸出各個標籤對應的概率,取出概率列表中最大的值的索引作為**結果。可以使用np.argmax(x)函式取出陣列中最大值的索引。np.argmax(x)將獲取被賦給引數x的陣列中最大值元素的索引。最後,比較神經網路所**的答案和正確解的標籤,將回答正確的概率作為識別精度。
通過x[i:i+batch_size]從輸入資料中抽出批資料:會取出從i到第i+batch_n個之間的資料,取出樣例如x[0:100],x[100:200]...從頭開始以100為單位將資料提取為批資料
然後通過argmax()函式獲取值最大的元素的索引
axis=1:指定在100*10陣列中,沿著第一位方向找到值最大的元素索引
使用批處理可以實現高速高效的運算
完整實現**如下:
#coding: utf-8
import
sys, os
#為了匯入父目錄的檔案而進行的設定
import
numpy as np
import
pickle
from dataset.mnist import
load_mnist
from common.functions import
sigmoid, softmax
defget_data():
(x_train,t_train),(x_test,t_test) = load_mnist(normalize=true,flatten=true,one_hot_label=false)
return
x_test,t_test
definit_network():
with open(
"sample_weight.pkl
",'rb
') as f:
network =pickle.load(f)
return
network
defpredict(network,x):
w1,w2,w3=network["
w1"],network["
w2"],network["w3"
] b1,b2,b3=network["
b1"],network["
b2"],network["b3"
] a1=np.dot(x,w1)+b1
z1=sigmoid(a1)
a2=np.dot(z1,w2)+b2
z2=sigmoid(a2)
a3=np.dot(z2,w3)+b3
y=softmax(a3)
return
yx,t=get_data()
network=init_network()
batch_size=100accuracy_cnt=0
for i in
range(0,len(x),batch_size):
x_batch=x[i:i+batch_size] #
通過x[i:i+batch_size]從輸入資料中抽出批資料
y_batch=predict(network,x_batch)
p=np.argmax(y_batch,axis=1) #
通過argmax()獲取值最大的元素索引
accuracy_cnt+=np.sum(p==t[i:i+batch_size])
print("
accuracy:
"+str(float(accuracy_cnt)/len(x)))
mini-batch 使用mini-batch進行學習
梯度:梯度指示的方向是各個點函式值減少最多的方向
pytorch神經網路學習筆記 2
關係擬合 import torch from torch.autograd import variable import torch.nn.functional as f import matplotlib.pyplot as plt x torch.unsqueeze torch.linspace...
神經網路 學習(2)
初始化,不能一開始全部全設成0,因為這樣的話,隱層結點就會變得全部一樣,體現不出神經網路多層多結點的優越性。咦 如果層數很多的話,超過三層,那麼有個潛規則就是中間的幾層的隱節點數一般都是一樣大小 隱節點數稍微大點輸入結點個數這個是極好的。下面就是幾個步驟 第一步,隨機化引數 第二步,前向得到乙個結果...
神經網路學習筆記
隱含層數越多,越容易擬合複雜函式 為了擬合複雜函式需要的隱含節點數目,基本上隨著隱含層數目的增加呈現指數下降的趨勢,也就是說層數越多,神經網路所需要的隱含節點可以越少。層數越深,概念越抽象,需要背誦的知識點 神經網路的隱含節點 就越少。但是,層數越多,容易出現過擬合以及引數難以除錯以及梯度瀰散的問題...