中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用tensorflow構建卷積神經網絡(CNN)

發布時間:2020-07-04 20:02:59 來源:網絡 閱讀:644 作者:nineteens 欄目:編程語言

  學習前言

  學習神經網絡已經有一段時間,從普通的BP神經網絡到LSTM長短期記憶網絡都有一定的了解,但是從未系統的把整個神經網絡的結構記錄下來,我相信這些小記錄可以幫助我更加深刻的理解神經網絡。

  簡介

  卷積神經網絡(Convolutional Neural Networks, CNN)是一類包含卷積計算且具有深度結構的前饋神經網絡(Feedforward Neural Networks),是深度學習(deep learning)的代表算法之一。

  其主要結構分為輸入層、隱含層、輸出層。

  在tensorboard中,其結構如圖所示:

  對于卷積神經網絡而言,其輸入層、輸出層與平常的卷積神經網絡無異。但其隱含層可以分為三個部分,分別是卷積層(對輸入數據進行特征提取)、池化層(特征選擇和信息過濾)、全連接層(等價于傳統前饋神經網絡中的隱含層)。

  隱含層介紹

  1、卷積層

  卷積將輸入圖像放進一組卷積濾波器,每個濾波器激活圖像中的某些特征。

  假設一副黑白圖像為5*5的大小,像這樣:

  利用如下卷積器進行卷積:

  

利用tensorflow構建卷積神經網絡(CNN)


  卷積結果為:

  卷積過程可以提取特征,卷積神經網絡是根據特征來完成分類的。

  在tensorflow中,卷積層的重要函數是:

  tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None),其中:

  1、input是輸入量,shape是[batch, height, width, channels]。;

  2、filter是使用的卷積核;

  3、strides是步長,其格式[1,step,step,1],step指的是在圖像卷積的每一維的步長;

  4、padding:string類型的量,只能是"SAME","VALID"其中之一,SAME表示卷積前后圖像面積不變。

  2、池化層

  池化層用于在卷積層進行特征提取后,輸出的特征圖會被傳遞至池化層進行特征選擇和信息過濾。

  常見的池化是最大池化,最大池化指的是取出這些被卷積后的數據的最大值,就是取出其最大特征。

  假設其池化窗口為2X2,步長為2。

  原圖像為:

  

利用tensorflow構建卷積神經網絡(CNN)


  池化后為:

  

利用tensorflow構建卷積神經網絡(CNN)


  在tensorflow中,池化層的重要函數是:

  tf.nn.max_pool(value, ksize, strides, padding, data_format, name)

  1、value:池化層的輸入,一般池化層接在卷積層后面,shape是[batch, height, width, channels]。

  2、ksize:池化窗口的大小,取一個四維向量,一般是[1, in_height, in_width, 1]。

  3、strides:和卷積類似,窗口在每一個維度上滑動的步長,也是[1, stride,stride, 1]。

  4、padding:和卷積類似,可以取’VALID’ 或者’SAME’。

  這是tensorboard中卷積層和池化層的連接結構:

  3、全連接層

  全連接層與普通神經網絡的結構相同,如圖所示:

  具體實現代碼

  卷積層、池化層與全連接層實現代碼

  def conv2d(x,W,step,pad): #用于進行卷積,x為輸入值,w為卷積核

  return tf.nn.conv2d(x,W,strides = [1,step,step,1],padding = pad)

  def max_pool_2X2(x,step,pad): #用于池化,x為輸入值,step為步數

  return tf.nn.max_pool(x,ksize = [1,2,2,1],strides= [1,step,step,1],padding = pad)

  def weight_variable(shape): #用于獲得W

  initial = tf.truncated_normal(shape,stddev = 0.1) #從截斷的正態分布中輸出隨機值

  return tf.Variable(initial)

  def bias_variable(shape): #獲得bias

  initial = tf.constant(0.1,shape=shape) #生成普通值

  return tf.Variable(initial)

  def add_layer(inputs,in_size,out_size,n_layer,activation_function = None,keep_prob = 1):

  #用于添加全連接層

  layer_name = 'layer_%s'%n_layer

  with tf.name_scope(layer_name):

  with tf.name_scope("Weights"):

  Weights = tf.Variable(tf.truncated_normal([in_size,out_size],stddev = 0.1),name = "Weights")

  tf.summary.histogram(layer_name+"/weights",Weights)

  with tf.name_scope("biases"):

  biases = tf.Variable(tf.zeros([1,out_size]) + 0.1,name = "biases")

  tf.summary.histogram(layer_name+"/biases",biases)

  with tf.name_scope("Wx_plus_b"):

  Wx_plus_b = tf.matmul(inputs,Weights) + biases

  tf.summary.histogram(layer_name+"/Wx_plus_b",Wx_plus_b)

  if activation_function == None :

  outputs = Wx_plus_b

  else:

  outputs = activation_function(Wx_plus_b)

  print(activation_function)

  outputs = tf.nn.dropout(outputs,keep_prob)

  tf.summary.histogram(layer_name+"/outputs",outputs)

  return outputs

  def add_cnn_layer(inputs, in_z_dim, out_z_dim, n_layer, conv_step = 1, pool_step = 2, padding = "SAME"):

  #用于生成卷積層和池化層

  layer_name = 'layer_%s'%n_layer

  with tf.name_scope(layer_name):

  with tf.name_scope("Weights"):

  W_conv = weight_variable([5,5,in_z_dim,out_z_dim])

  with tf.name_scope("biases"):

  b_conv = bias_variable([out_z_dim])

  with tf.name_scope("conv"):

  #卷積層

  h_conv = tf.nn.relu(conv2d(inputs, W_conv, conv_step, padding)+b_conv)

  with tf.name_scope("pooling"):

  #池化層

  h_pool = max_pool_2X2(h_conv, pool_step, padding)

  return h_pool

  全部代碼

  import tensorflow as tf

  from tensorflow.examples.tutorials.mnist import input_data

  mnist = input_data.read_data_sets("MNIST_data",one_hot = "true")

  def conv2d(x,W,step,pad):

  return tf.nn.conv2d(x,W,strides = [1,step,step,1],padding = pad)

  def max_pool_2X2(x,step,pad):

  return tf.nn.max_pool(x,ksize = [1,2,2,1],strides= [1,step,step,1],padding = pad)

  def weight_variable(shape):

  initial = tf.truncated_normal(shape,stddev = 0.1) #從截斷的正態分布中輸出隨機值

  return tf.Variable(initial)

  def bias_variable(shape):

  initial = tf.constant(0.1,shape=shape) #生成普通值

  return tf.Variable(initial)無錫人流醫院 http://www.0510bhyy.com/

  def add_layer(inputs,in_size,out_size,n_layer,activation_function = None,keep_prob = 1):

  layer_name = 'layer_%s'%n_layer

  with tf.name_scope(layer_name):

  with tf.name_scope("Weights"):

  Weights = tf.Variable(tf.truncated_normal([in_size,out_size],stddev = 0.1),name = "Weights")

  tf.summary.histogram(layer_name+"/weights",Weights)

  with tf.name_scope("biases"):

  biases = tf.Variable(tf.zeros([1,out_size]) + 0.1,name = "biases")

  tf.summary.histogram(layer_name+"/biases",biases)

  with tf.name_scope("Wx_plus_b"):

  Wx_plus_b = tf.matmul(inputs,Weights) + biases

  tf.summary.histogram(layer_name+"/Wx_plus_b",Wx_plus_b)

  if activation_function == None :

  outputs = Wx_plus_b

  else:

  outputs = activation_function(Wx_plus_b)

  print(activation_function)

  outputs = tf.nn.dropout(outputs,keep_prob)

  tf.summary.histogram(layer_name+"/outputs",outputs)

  return outputs

  def add_cnn_layer(inputs, in_z_dim, out_z_dim, n_layer, conv_step = 1, pool_step = 2, padding = "SAME"):

  layer_name = 'layer_%s'%n_layer

  with tf.name_scope(layer_name):

  with tf.name_scope("Weights"):

  W_conv = weight_variable([5,5,in_z_dim,out_z_dim])

  with tf.name_scope("biases"):

  b_conv = bias_variable([out_z_dim])

  with tf.name_scope("conv"):

  h_conv = tf.nn.relu(conv2d(inputs, W_conv, conv_step, padding)+b_conv)

  with tf.name_scope("pooling"):

  h_pool = max_pool_2X2(h_conv, pool_step, padding)

  return h_pool

  def compute_accuracy(x_data,y_data):

  global prediction

  y_pre = sess.run(prediction,feed_dict={xs:x_data,keep_prob:1})

  correct_prediction = tf.equal(tf.arg_max(y_data,1),tf.arg_max(y_pre,1))

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

  result = sess.run(accuracy,feed_dict = {xs:batch_xs,ys:batch_ys,keep_prob:1})

  return result

  keep_prob = tf.placeholder(tf.float32)

  xs = tf.placeholder(tf.float32,[None,784])

  ys = tf.placeholder(tf.float32,[None,10])

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

  h_pool1 = add_cnn_layer(x_image, in_z_dim = 1, out_z_dim = 32, n_layer = "cnn1",)

  h_pool2 = add_cnn_layer(h_pool1, in_z_dim = 32, out_z_dim = 64, n_layer = "cnn2",)

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

  h_fc1_drop = add_layer(h_pool2_flat, 7*7*64, 1024, "layer1", activation_function = tf.nn.relu, keep_prob = keep_prob)

  prediction = add_layer(h_fc1_drop, 1024, 10, "layer2", activation_function = tf.nn.softmax, keep_prob = 1)

  with tf.name_scope("loss"):

  loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=ys,logits = prediction),name = 'loss')

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

  train = tf.train.AdamOptimizer(1e-4).minimize(loss)

  init = tf.initialize_all_variables()

  merged = tf.summary.merge_all()

  with tf.Session() as sess:

  sess.run(init)

  write = tf.summary.FileWriter("logs/",sess.graph)

  for i in range(5000):

  batch_xs,batch_ys = mnist.train.next_batch(100)

  sess.run(train,feed_dict = {xs:batch_xs,ys:batch_ys,keep_prob:0.5})

  if i % 100 == 0:

  print(compute_accuracy(mnist.test.images,mnist.test.labels))

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岳西县| 开远市| 洪湖市| 腾冲县| 日土县| 余姚市| 仙游县| 潢川县| 汽车| 塘沽区| 岚皋县| 许昌市| 藁城市| 鲁山县| 松潘县| 武邑县| 葵青区| 岢岚县| 呼和浩特市| 合山市| 廊坊市| 买车| 汉沽区| 临汾市| 桦川县| 资溪县| 平湖市| 大兴区| 定日县| 盐城市| 泽州县| 水城县| 额济纳旗| 台安县| 大英县| 乌兰浩特市| 沈阳市| 西宁市| 五原县| 邢台县| 海伦市|