Tensorflow實現乙個簡單的卷積神經網路

2021-08-22 06:14:40 字數 3341 閱讀 8486

今天對照tensorflow的書,實現了乙個簡單的卷積神經網路。基於mnist資料集。

在神經網路還未出現之前,在處理影象的問題上都是使用的特徵工程(如sift)。特徵工程是有侷限性的。cnn被用於影象處理,不需要將特徵提取和分類訓練兩個過程分開,它在訓練時就自動提取了最有效的特徵。

卷積神經網路由多個卷積層構成,每個卷積層通常會進行如下操作:

1. 使用多個卷積核進行濾波,並加bias,提取出區域性特徵,並對映出乙個新的2d影象

2. 使用啟用函式進行處理,一般使用(relu)

3. 進行池化操作(一般是最大池化,以保留最顯著的特徵)

**如下:(兩個卷積層加乙個全連線層)

from tensorflow.examples.tutorials.mnist import input_data

import tensorflow as tf

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

sess = tf.interactivesession()

# 定義weight的初始化函式便於重複利用,並且設定標準差為0.1

def weight_variable(shape):

initial = tf.truncated_normal(shape, stddev=0.1)

return tf.variable(initial)

# 定義bias的初始化函式,並加乙個小的正值,避免death節點

def bias_variable(shape):

initial = tf.constant(0.1, shape=shape)

return tf.variable(initial)

# 定義二維卷積函式,strides代表模板移動的步長,padding讓卷積的輸出與輸入保持相同

def conv2d(x, w):

return tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding="same")

# 定義最大池化函式,使用2×2的池化層,將2×2變成1×1

# ksize[batch,height,width,channel], strides[batch,h_step,w_step,channel]

def max_pool_2x2(x):

return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1],

padding="same")

# 定義輸入的placeholder,並將1×784變成28×28,-1代表樣本數量不固定

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

y_ = tf.placeholder(tf.float32, [none, 10])

x_image = tf.reshape(x, [-1, 28, 28, 1])

# 第乙個卷積層

# w [尺寸,尺寸,通道數,卷積核的數量]

w_conv1 = weight_variable([5, 5, 1, 32])

b_conv1 = bias_variable([32])

h_conv1 = tf.nn.relu(conv2d(x_image, w_conv1) + b_conv1)

h_pool1 = max_pool_2x2(h_conv1)

# 第二個卷積層

w_conv2 = weight_variable([5, 5, 32, 64])

b_conv2 = bias_variable([64])

h_conv2 = tf.nn.relu(conv2d(h_pool1, w_conv2) + b_conv2)

h_pool2 = max_pool_2x2(h_conv2)

# 全連線層,經歷兩次池化操作,變成了7×7的圖

w_fc1 = weight_variable([7 * 7 * 64, 1024])

b_fc1 = bias_variable([1024])

h_pool2_flat = tf.reshape(h_pool2, [-1, 7 * 7 * 64])

h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, w_fc1) + b_fc1)

# 定義乙個dropout層

keep_prob = tf.placeholder(tf.float32)

h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)

# 定義乙個softmax層,得到10個結果的概率

w_fc2 = weight_variable([1024, 10])

b_fc2 = bias_variable([10])

y_conv = tf.nn.softmax(tf.matmul(h_fc1_drop, w_fc2) + b_fc2)

# 定義損失函式和優化器

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

reduction_indices=[1]))

train_step = tf.train.adamoptimizer(1e-4).minimize(cross_entropy)

# 評測準確率

correct_prediction = tf.equal(tf.arg_max(y_conv, 1), tf.arg_max(y_, 1))

accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

# 開始訓練過程,乙個batch是50,每100次進行一次測評

tf.global_variables_initializer().run()

for i in range(20000):

batch = mnist.train.next_batch(50)

if i % 100 == 0:

train_accuracy = accuracy.eval(feed_dict=)

print("step %d, training accuracy %g" % (i, train_accuracy))

train_step.run(feed_dict=)

# 在測試集上進行全面的測試,得到整體的分類準確率

print("test accuracy %g" % accuracy.eval(feed_dict=))

實驗結果:

TensorFlow實現乙個簡單線性回歸的例子

1 author wsx 2import tensorflow as tf 3import numpy as np 4import matplotlib.pyplot as plt 56 x data np.linspace 0.5,0.5,200 np.newaxis 0.5 0.5 之間產生20...

第乙個tensorflow程式

個人部落格 最近alphago和alphazero的出現,預示著2017年成為人工智慧元年,人工智慧逐漸進入我們的生活和工作的方方面面,如在工作中,阿里巴巴雙十一中,出現了 千人千面 智慧型推薦系統,魯班ai設計師,小蜜機械人,idc智慧型巡檢機械人,還有京東的無人倉庫等。這些都讓我覺得人工智慧越來...

第乙個TensorFlow程式

tensorflow的執行方式分為如下4步 1 載入資料及定義超引數 2 構建網路 3 訓練模型 4 評估模型和進行 import tensorflow as tf import numpy as np 構造滿足一元二次方程的函式 x data np.linspace 1,1,300 np.newa...