day14 卷積網路識別手寫數字

2022-05-05 17:39:08 字數 4091 閱讀 9283

卷積網路的結構為:

"""權重初始化函式

:param shape:

:return:

"""weight = tf.variable(tf.random_normal(shape,seed=0.0,stddev=1.0))

return weight

def bias_variable(shape):

"""偏置初始化函式

:param shape:

:return:

"""bias = tf.variable(tf.random_normal(shape, seed=0.0, stddev=1.0))

return bias

def model():

"""定義卷積網路模型

:return:

"""# 1、準備資料

with tf.variable_scope("pre_data"):

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

y_true = tf.placeholder(tf.int64,[none,10])

# 2、定義第一層卷積網路

# 卷積層為:[5*5*1] 大小的過濾器,有32個,步長為1

# 池化層為 [2*2] 大小的,步長為2

with tf.variable_scope("conv1"):

# 卷積層輸入的格式為[batch,heigth,width,channel],所以x的形狀需要修改

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

# 初始化過濾器,為[5*5]大小的,設定32個

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

bias1 = bias_variable([32])

# 卷積層定義,將資料變為[none,28,28,32]

x_jjc1 = tf.nn.conv2d(input=x_reshape1,filter=filter1,strides=[1,1,1,1],padding="same")

# 啟用層

x_relu1 = tf.nn.relu(x_jjc1) + bias1

# 池化層,將資料[none,28,28,32] 變為 [none,14,14,32]

x_pool1 = tf.nn.max_pool(x_relu1,ksize=[1,2,2,1],strides=[1,2,2,1],padding="same")

# 3、定義第二層卷積網路

# 卷積層為[5*5*32],64個,步長為1

# 池化層為[2*2],步長為2

with tf.variable_scope("conv2"):

# 定義第二個卷積層的過濾器

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

bias2 = bias_variable([64])

# 卷積層定義,將資料變為[none,14,14,64]

x_jjc2 = tf.nn.conv2d(input=x_pool1,filter=filter2,strides=[1,1,1,1],padding="same")

# 啟用層

x_relu2 = tf.nn.relu(x_jjc2) + bias2

# 池化層,將資料變為[none,7,7,64]

x_pool2 = tf.nn.max_pool(value=x_relu2,ksize=[1,2,2,1],strides=[1,2,2,1],padding="same")

# 4、定義全連線層

with tf.variable_scope("fc"):

# 定義權重和偏置

weight = weight_variable([7 * 7 * 64 ,10])

bias_fc = bias_variable([10])

x_pool2_reshape = tf.reshape(x_pool2,[-1,7*7*64])

# **值

y_predict = tf.matmul(x_pool2_reshape,weight) + bias_fc

return x,y_true,y_predict

def convolution():

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

# 1、定義模型

x,y_true,y_predict = model()

# 3、模型引數計算

with tf.variable_scope("model_soft_corss"):

# 計算交叉熵損失

softmax = tf.nn.softmax_cross_entropy_with_logits(labels=y_true, logits=y_predict)

# 計算損失平均值

loss = tf.reduce_mean(softmax)

# 4、梯度下降(反向傳播演算法)優化模型

with tf.variable_scope("model_better"):

tarin_op = tf.train.gradientdescentoptimizer(0.0001).minimize(loss)

# 5、計算準確率

with tf.variable_scope("model_acc"):

# 計算出每個樣本是否**成功,結果為:[1,0,1,0,0,0,....,1]

equal_list = tf.equal(tf.argmax(y_true, 1), tf.argmax(y_predict, 1))

# 計算出準確率,先將**是否成功換為float可以得到詳細的準確率

acc = tf.reduce_mean(tf.cast(equal_list, tf.float32))

# 6、準備工作

# 定義變數初始化op

init_op = tf.global_variables_initializer()

# 定義哪些變數記錄

tf.summary.scalar("losses", loss)

tf.summary.scalar("acces", acc)

merge = tf.summary.merge_all()

# 開啟會話執行

with tf.session() as sess:

# 變數初始化

sess.run(init_op)

# 開啟記錄

filewriter = tf.summary.filewriter("../summary/day08/", graph=sess.graph)

for i in range(1000):

# 準備資料

mnist_x, mnist_y = mnist.train.next_batch(50)

# 開始訓練

sess.run([tarin_op], feed_dict=)

# 得出訓練的準確率,注意還需要將資料填入

print("第%d次訓練,準確率為:%f" % ((i + 1), sess.run(acc, feed_dict=)))

# 寫入每步訓練的值

summary = sess.run(merge, feed_dict=)

filewriter.add_summary(summary, i)

return none

if __name__ == '__main__':

convolution()

結果為:

10 卷積神經網路實現手寫數字識別

資料集還是使用的mnist 資料集 首先說一下資料的格式 資料有四個引數 shape height width channels 彩色影象 rgb h,w,3 灰白 h,w,1 or h,w,4 e,g png圖 conv2d 輸入的形狀 batch,height,width,channels mn...

《1。卷積神經網路》

1.簡述卷積的基本操作,並分析其與全連線層的區別 答 具有區域性連線和權值共享的特點。卷積操作能夠在輸出資料中大致保持輸入資料的結構資訊 2.在卷積神經網路中,如何計算各層的感受野大小?答 3.卷積層的輸出尺寸 參數量和計算量 答 輸出尺寸 1.簡述分組卷積及其應用場景 答 分組卷積就是將輸入通道和...

卷積神經網路 1 1 卷積核

卷積神經網路中卷積核的作用是提取影象更高維的特徵,乙個卷積核代表一種特徵提取方式,對應產生乙個特徵圖,卷積核的尺寸對應感受野的大小。經典的卷積示意圖如下 5 5的影象使用3 3的卷積核進行卷積,結果產生3 3 5 3 1 的特徵影象。卷積核的大小一般是 2n 1 2n 1 的奇數乘奇數大小 n 1 ...