神經網路做的是提前特徵的工作,與邏輯回歸相比,新增了中間層和啟用函式。
這裡輸入設定為784,輸出的分類為10
隱藏層:讓輸入的特徵進行更好的組合變化,把784個特徵按照某種方式對映成更高階,識別能力更強的特徵。這裡把隱藏層設定為50個單元。
1.匯入包
#mnist資料集 屬性已經寫好 可以直接呼叫
from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf
#one_hot=true 表示對label進行one-hot編碼,比如標籤4可表示為[0,0,0,0,1,0,0,0,0,0,0]
mnist = input_data.read_data_sets('data/',one_hot=true)
2.引數設定
numclass = 10
inputsize = 784
numhiddenunits = 50 #隱藏層50個單元
trainingiterations = 10000
batchsize = 100 #每次訓練在訓練集中取batchsize個樣本訓練
x = tf.placeholder(tf.float32,shape = [none,inputsize])
y = tf.placeholder(tf.float32,shape = [none,numclass])
3. 引數初始化
w1 = tf.variable(tf.truncated_normal([inputsize,numhiddenunits],stddev=0.1))
b1 = tf.variable(tf.constant(0.1),[numhiddenunits])
w2 = tf.variable(tf.truncated_normal([numhiddenunits,numclass],stddev=0.1))
b2 = tf.variable(tf.constant(0.1),[numhiddenunits])
4.網路結構
hiddenlayeroutput = tf.matmul(x,w1) + b1 #隱藏層
hiddenlayeroutput = tf.nn.relu(hiddenlayeroutput) #新增啟用函式relu
finaloutput = tf.matmul(hiddenlayeroutput,w2) + b2 #中間層
finaloutput = tf.nn.relu(finaloutput) #新增啟用函式relu
5.網路迭代
#網路迭代
#損失值。指定tf.nn.softmax_cross_entropy_with_logits模組下交叉熵損失函式,labels為資料中的真實值,logits為**值
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels = y,logits = finaloutput))
#指定優化器,最小化損失函式
opt = tf.train.gradientdescentoptimizer(learning_rate = .1).minimize(loss)
6.通過當前結果計算精度值
correct_prediction = tf.equal(tf.argmax(finaloutput,1),tf.argmax(y,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction,"float32"))
7.執行
sess = tf.session()
init = tf.global_variables_initializer()
sess.run(init)
for i in range(trainingiterations):
batch = mnist.train.next_batch(batchsize)
batchinput = batch[0]
batchlabels = batch[1]
_,trainloss = sess.run([opt,loss],feed_dict=)
if i%1000 == 0:
trainaccuracy = accuracy.eval(session=sess,feed_dict=)
print("step %d , training accuracy %g"%(i,trainaccuracy))
效果:
神經網路(一) 單層感知機
感知機是乙個二類分類的線性分類模型,用來做分類的,類別用 1和 1表示。樣本中的各個特徵組成了空間中的不同的點,點被分成兩類,1和 1。我們的目的就是找到乙個超平面將這兩類點分開。超平面可以用wx b表示,或者將b改寫成w 0w 0 w0 將x的第一列加上偏置項 全1 那麼我們就可以用wx來表示這個...
神經網路(單層感知器)
感知器是神經網路中的乙個概念,在1950s由frank rosenblatt第一次引入。單層感知器是最簡單的神經網路。它包含輸入層和輸出層,而輸入層和輸出層是直接相連的。與最早提出的mp模型不同,神經元突觸權值可變,因此可以通過一定規則進行學習。可以快速 可靠地解決線性可分的問題。單層感知器由乙個線...
神經網路 單層感知器
神經網路是非常重要的且用途廣泛,通過模擬人體的處理資訊方式來解決問題,下面就來介紹一下單層感知器。import numpy as np import matplotlib.pyplot as plt 輸入資料 x np.array 1,3,3 1,4,3 1,1,1 1,0,2 標籤y np.arr...