單層神經網路demo

2021-08-28 20:58:00 字數 2500 閱讀 5589

神經網路做的是提前特徵的工作,與邏輯回歸相比,新增了中間層和啟用函式。

這裡輸入設定為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...