卷積網路的結構為:
"""權重初始化函式
: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 ...