《tensorflow實戰》之實現多層感知器(二)

2021-08-17 02:18:23 字數 2270 閱讀 8223

理論研究表明,神經網路隱含層,層數越多,所需要的隱含節點可以越少。

有一種方法叫dropout,在使用複雜的卷積神經網路訓練影象資料時尤其有效,簡單說,就是將神經網路某一層的輸出節點資料隨機丟棄一部分。實質上等於創造出了很多新的隨機樣本,通過增大樣本量、減少特徵數量來防止過擬合。

拿sgd來舉例,不同的學習速率可能會有不同的區域性最優解。adagrad等自適應的方法可以減輕除錯引數的負擔。

在relu啟用函式出現之前,大多用sigmoid啟用函式,但是sigmoid函式在反向傳播中梯度值會逐漸減小,經過多層的傳遞後會呈指數級急劇減小,這種情況下,根據訓練資料的反饋來更新神經網路的引數會非常緩慢。

from tensorflow.examples.tutorials.mnist import input_data  

import tensorflow as tf

mnist = input_data.read_data_sets("mnist_data/",one_hot=true)

in_units = 784

# 輸入節點數

h1_units = 300

# 隱含層輸出節點數

w1 = tf.variable(tf.truncated_normal([in_units,h1_units],stddev=0.01))

b1 = tf.variable(tf.zeros([h1_units]))

w2 = tf.variable(tf.zeros([h1_units,10]))

b2 = tf.variable(tf.zeros([10]))

x = tf.placeholder(tf.float32,[none,in_units])

keep_prob = tf.placeholder(tf.float32) # dropout的比率,一種防止過擬合的方法。

hidden1 = tf.nn

.relu(tf.matmul(x,w1) + b1) # 隱含層

hidden1_drop = tf.nn

.dropout(hidden1,keep_prob) # 隨機將一部分節點置為0,keep_prob即為保留資料而不置為0的比例。

y = tf.nn

.softmax(tf.matmul(hidden1_drop,w2) + b2)

y_ = tf.placeholder(tf.float32,[none,10]) # **結果

cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y),

reduction_indices=[1]))

train_step = tf.train

.adagradoptimizer(0.3).minimize(cross_entropy) #利用adagrad緩解引數調優問題。

tf.global_variables_initializer().run()  

for i in range(3000):

batch_xs,batch_ys = mnist.train

.next_batch(100) #一共30w樣本

train_step.run() # 保留75%的節點,其餘都置為0

correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(y_,1)) # **相等的樣本數

accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) # 準確率

print(accuracy.eval())

# 評估

correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(y_,1)) # **相等的樣本數

accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) # 準確率

print(accuracy.eval())

多層神經網路(mlp)加入了隱含層,解決了單層神經網路無法解決xor問題,引入了非線性。

早期的神經網路沒有隱含層,無法解決xor問題。因為沒有隱含層的神經網路是線性的

相比之前的softmax,我們的準確率大幅提公升,這裡我們新增乙個隱含層,並使用了 dropout、adagrad、relu方法。

docker之實戰案例

1 檢視本地的映象 docker images2 檢視執行的容器 docker ps3 啟動容器 docker run it x4 拉取映象 docker pull x第一步 在雲伺服器的根目錄新建乙個mydocker資料夾 mkdir mydocker cd mydocker第二步 新建docke...

python練手實戰之實現貪吃蛇

python的基礎已經學的差不多了,接下來想通過練習一些小的專案將python的知識進行總結和整合 首先進行學習的就是貪吃蛇遊戲,那咱們就正式開始貪吃蛇遊戲的實現。首先引入一些本實驗需要用到的資源 import pygame import sys import random 對於pygame的安裝可...

Tensorflow實戰 張量

import tensorflow as tf tf.constant 是乙個計算,這個計算的結果為乙個張量,儲存在變數a中。a tf.constant 1.0,2.0 name a b tf.constant 2.0,3.0 name b result tf.add a,b,name add pr...