zoukankan      html  css  js  c++  java
  • TensorFlow 框架学习

    一、TensorFlow基础使用

      创建、启动图

    1 #创建一个常量op
    2 m1 = tf.constant([[3,3]])
    3 #创建一个常量op
    4 m2 = tf.constant([[2],[3]])
    5 #创建一个矩阵乘法op,把m1和m2传入
    6 product = tf.matmul(m1,m2)
    7 print(product)

      

    1 #定义一个会话,自动启动默认图
    2 sess = tf.Session()
    3 #调用sess的run方法来执行矩阵乘法op
    4 #run(product)触发了图中3个op
    5 result = sess.run(product)
    6 print(result)
    7 sess.close()

      需要建立一个会话,才能得到两个常量的乘积

    1 #上面这段启动session可以改写成如下形式,此时就不用手动的去调用sess.close去关闭session
    2 with tf.Session() as sess:
    3     #调用sess的run方法来执行矩阵乘法op
    4     #run(product)触发了图中3个op
    5     result = sess.run(product)
    6     print(result)

      变量

    1 import tensorflow as tf
     1 #定义变量
     2 x = tf.Variable([1,2])
     3 a = tf.constant([3,3])
     4 #定义减法和加法的op
     5 sub = tf.subtract(x,a)
     6 add = tf.add(x,sub)
     7 
     8 #使用变量前要先初始化
     9 init = tf.global_variables_initializer()
    10 
    11 #定义会话
    12 with tf.Session() as sess:
    13     #先运行初始化变量
    14     sess.run(init)
    15 
    16     print(sess.run(sub))
    17     print(sess.run(add))
     1 #变量可以初始化,初始化的值为0,名字为counter
     2 state = tf.Variable(0,name='counter')
     3 
     4 new_value = tf.add(state,1)
     5 
     6 #调用赋值操作,不能直接用等号赋值
     7 update = tf.assign(state,new_value)
     8 
     9 #因为state是变量,所以需要初始化
    10 init = tf.global_variables_initializer()
    11 
    12 #定义会话
    13 with tf.Session() as sess:
    14     #先运行初始化变量
    15     sess.run(init)
    16     #查看初始化的值
    17     print(sess.run(state))
    18 
    19     for _ in range(5):
    20         sess.run(update)
    21         print(sess.run(state))
    1 import tensorflow as tf
     1 #Fetch: 可以同时运行多个op
     2 input1 = tf.constant(3.0)
     3 input2 = tf.constant(2.0)
     4 input3 = tf.constant(5.0)
     5 
     6 add = tf.add(input2,input3)
     7 mul = tf.multiply(input1,add)
     8 
     9 with tf.Session() as sess:
    10     #fetch多个op时,只要用中括号将多个op括起来即可
    11     result = sess.run([add,mul])
    12     print(result)
     1 #Feed
     2 #创建占位符 :placeholder
     3 input1 = tf.placeholder(tf.float32)
     4 input2 = tf.placeholder(tf.float32)
     5 
     6 #可以在运行output时,再将input1和input2的值传入,传入时采用字典的形式
     7 output = tf.multiply(input1,input2)
     8 with tf.Session() as sess:
     9     #传入时采用字典的形式
    10     print(sess.run(output,feed_dict={input1:[8.],input2:[3.]}))

      tensorflow的简单使用

    1 import tensorflow as tf
    2 import numpy as np
      1 #使用numpy生成100个随机点
      2 x_data = np.random.rand(100)
      3 y_data = x_data*0.1 + 0.2
      4 
      5 #构建一个线性模型
      6 b = tf.Variable(0.)
      7 k = tf.Variable(0.)
      8 y = x_data*k + b
      9 
     10 #使用tensorflow训练出模型,即得到k和b的值
     11 #定义二次代价函数
     12 loss = tf.reduce_mean(tf.square(y_data - y))
     13 #使用梯度下降函数来进行训练的优化器,下面学习率是0.2
     14 optimizer = tf.train.GradientDescentOptimizer(0.2)
     15 #最小化代价函数
     16 train = optimizer.minimize(loss)
     17 
     18 
     19 #初始化变量
     20 init = tf.global_variables_initializer()
     21 with tf.Session() as sess:
     22     #先运行初始化变量
     23     sess.run(init)
     24 
     25     for step in range(201):
     26         sess.run(train)
     27         if step%20 ==0 :
     28             print(step,sess.run([k,b]))
     29 1
     30 2
     31 3
     32 4
     33 5
     34 6
     35 7
     36 8
     37 9
     38 10
     39 11
     40 12
     41 13
     42 14
     43 15
     44 16
     45 17
     46 18
     47 19
     48 20
     49 21
     50 22
     51 23
     52 24
     53 25
     54 26
     55 27
     56 28
     57 1
     58 2
     59 3
     60 4
     61 5
     62 6
     63 7
     64 8
     65 9
     66 10
     67 11
     68 12
     69 13
     70 14
     71 15
     72 16
     73 17
     74 18
     75 19
     76 20
     77 21
     78 22
     79 23
     80 24
     81 25
     82 26
     83 27
     84 28
     85 0 [0.0517033, 0.099609137] 
     86 20 [0.1019343, 0.1989941] 
     87 40 [0.10121739, 0.19936697] 
     88 60 [0.10076618, 0.19960159] 
     89 80 [0.10048222, 0.19974925] 
     90 100 [0.1003035, 0.19984218] 
     91 120 [0.10019101, 0.19990067] 
     92 140 [0.10012019, 0.19993751] 
     93 160 [0.10007564, 0.19996066] 
     94 180 [0.10004761, 0.19997525] 
     95 200 [0.10002997, 0.19998442]
     96 
     97 tensorflow线性回归以及分类的简单实用,softmax介绍
     98 
     99 非线性回归
    100 
    101 import tensorflow as tf
    102 import numpy as np
    103 import matplotlib.pyplot as plt
    104 1
    105 2
    106 3
    107 1
    108 2
    109 3
    110 #使用numpy生成200个随机点
    111 #生成范围[-0.5,0.5]的200个点,下面生成200行1列的数据
    112 x_data = np.linspace(-0.5,0.5,200)[:,np.newaxis]
    113 noise = np.random.normal(0,0.02,x_data.shape)
    114 y_data = np.square(x_data) + noise
    115 
    116 
    117 #定义两个placeholder
    118 #下面[]里面表示行不确定,列只有一列
    119 x = tf.placeholder(tf.float32,[None,1])
    120 y = tf.placeholder(tf.float32,[None,1])
    121 
    122 #定义神经网络中间层
    123 #神经元定义为[1,10],是因为输入的神经元是1个,中间层的神经元定义了10个
    124 Weight_L1 = tf.Variable(tf.random_normal([1,10]))
    125 biases_L1 = tf.Variable(tf.zeros([1,10]))
    126 Wx_plus_b_L1 = tf.matmul(x,Weight_L1) + biases_L1
    127 L1 = tf.nn.tanh(Wx_plus_b_L1)
    128 
    129 #定义神经网络输出层
    130 Weight_L2 = tf.Variable(tf.random_normal([10,1]))
    131 biases_L2 = tf.Variable(tf.zeros([1,1]))
    132 Wx_plus_b_L2 = tf.matmul(L1,Weight_L2) + biases_L2
    133 prediction = tf.nn.tanh(Wx_plus_b_L2)
    134 
    135 
    136 #二次代价函数
    137 loss = tf.reduce_mean(tf.square(y-prediction))
    138 
    139 
    140 #使用梯度下降法训练
    141 train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
    142 
    143 
    144 with tf.Session() as sess:
    145     #变量初始化
    146     sess.run(tf.global_variables_initializer())
    147     for _ in range(2000):
    148         sess.run(train_step,feed_dict={x:x_data,y:y_data})
    149 
    150     #获得预测值
    151     prediction_value = sess.run(prediction, feed_dict={x:x_data})
    152 
    153     #画图
    154     plt.figure()
    155     plt.scatter(x_data,y_data)
    156     plt.plot(x_data,prediction_value,'r-',lw=5)
    157     plt.show()
    View Code

      MNIST数据集分类简单版

    1 import tensorflow as tf
    2 from tensorflow.examples.tutorials.mnist import input_data
     1 #载入数据集
     2 #one_hot是将数据改成0-1的格式
     3 mnist = input_data.read_data_sets("MNIST_data",one_hot=True)
     4 
     5 #每个批次的大小
     6 batch_size = 100
     7 
     8 #计算一共有多少个批次
     9 n_batch = mnist.train.num_examples // batch_size
    10 
    11 #定义两个placeholder,一个图片是28x28=784
    12 x = tf.placeholder(tf.float32,[None,784])
    13 y = tf.placeholder(tf.float32,[None,10])
    14 
    15 #创建一个简单的神经网络
    16 Weight_L1 = tf.Variable(tf.zeros([784,10]))
    17 biases_L1 = tf.Variable(tf.zeros([10]))
    18 Wx_plus_b_L1 = tf.matmul(x,Weight_L1) + biases_L1
    19 prediction = tf.nn.softmax(Wx_plus_b_L1)
    20 
    21 
    22 
    23 #二次代价函数
    24 loss = tf.reduce_mean(tf.square(y-prediction))
    25 
    26 #使用梯度下降法训练
    27 train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)
    28 
    29 #初始化变量
    30 init = tf.global_variables_initializer()
    31 
    32 #结果存在一个布尔型的列表中
    33 correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1)) #argmax返回一个张量中最大值存在的位置
    34 
    35 #求准确率
    36 accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) #将布尔型转换为float32, true->1 false ->0
    37 
    38 with tf.Session() as sess:
    39     sess.run(init)
    40 
    41     for epoch in range(21):
    42         for batch in range (n_batch):
    43             #获取每个batch的图片
    44             batch_xs,batch_ys = mnist.train.next_batch(batch_size)
    45             sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys})
    46 
    47         acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels})
    48         print("Iter " + str(epoch) + ",Testing Accuracy "+ str(acc))
    View Code
     1 #第三章作业,修改神经网络使得识别率达到95%以上
     2 #载入数据集
     3 #one_hot是将数据改成0-1的格式
     4 mnist = input_data.read_data_sets("MNIST_data",one_hot=True)
     5 
     6 #每个批次的大小
     7 batch_size = 100
     8 
     9 #计算一共有多少个批次
    10 n_batch = mnist.train.num_examples // batch_size
    11 
    12 #定义两个placeholder,一个图片是28x28=784
    13 x = tf.placeholder(tf.float32,[None,784])
    14 y = tf.placeholder(tf.float32,[None,10])
    15 
    16 #创建一个简单的神经网络
    17 Weight_L1 = tf.Variable(tf.zeros([784,20]))
    18 biases_L1 = tf.Variable(tf.zeros([20]))
    19 Wx_plus_b_L1 = tf.matmul(x,Weight_L1) + biases_L1
    20 L1 = tf.nn.tanh(Wx_plus_b_L1)
    21 
    22 
    23 #定义神经网络输出层
    24 Weight_L2 = tf.Variable(tf.random_normal([20,10]))
    25 biases_L2 = tf.Variable(tf.zeros([10]))
    26 Wx_plus_b_L2 = tf.matmul(L1,Weight_L2) + biases_L2
    27 prediction = tf.nn.softmax(Wx_plus_b_L2)
    28 
    29 #二次代价函数
    30 loss = tf.reduce_mean(tf.square(y-prediction))
    31 
    32 #使用梯度下降法训练
    33 train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)
    34 
    35 #初始化变量
    36 init = tf.global_variables_initializer()
    37 
    38 #结果存在一个布尔型的列表中
    39 correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1)) #argmax返回一个张量中最大值存在的位置
    40 
    41 #求准确率
    42 accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) #将布尔型转换为float32, true->1 false ->0
    43 
    44 with tf.Session() as sess:
    45     sess.run(init)
    46 
    47     for epoch in range(100):
    48         for batch in range (n_batch):
    49             #获取每个batch的图片
    50             batch_xs,batch_ys = mnist.train.next_batch(batch_size)
    51             sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys})
    52 
    53         acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels})
    54         print("Iter " + str(epoch) + ",Testing Accuracy "+ str(acc))
    View Code

    二、交叉熵,过拟合,dropout以及tensorflow中各种优化器的介绍

    交叉熵

    1 import tensorflow as tf
    2 from tensorflow.examples.tutorials.mnist import input_data
     1 #将二次代价函数替换成交叉熵
     2 # tf.nn.sigmod_cross_entropy_with_logits() 来表示跟sigmod搭配使用的交叉熵
     3 # tf.nn.softmax_cross_entropy_with_logits() 来表示跟softmax搭配使用的交叉熵
     4 #载入数据集
     5 #one_hot是将数据改成0-1的格式
     6 mnist = input_data.read_data_sets("MNIST_data",one_hot=True)
     7 
     8 #每个批次的大小
     9 batch_size = 100
    10 
    11 #计算一共有多少个批次
    12 n_batch = mnist.train.num_examples // batch_size
    13 
    14 #定义两个placeholder,一个图片是28x28=784
    15 x = tf.placeholder(tf.float32,[None,784])
    16 y = tf.placeholder(tf.float32,[None,10])
    17 
    18 #创建一个简单的神经网络
    19 Weight_L1 = tf.Variable(tf.zeros([784,10]))
    20 biases_L1 = tf.Variable(tf.zeros([10]))
    21 Wx_plus_b_L1 = tf.matmul(x,Weight_L1) + biases_L1
    22 prediction = tf.nn.softmax(Wx_plus_b_L1)
    23 
    24 
    25 
    26 #二次代价函数
    27 #loss = tf.reduce_mean(tf.square(y-prediction))
    28 
    29 #交叉熵
    30 #首先看输入logits,它的shape是[batch_size, num_classes] ,一般来讲,就是神经网络最后一层的输入z。
    31 #另外一个输入是labels,它的shape也是[batch_size, num_classes],就是我们神经网络期望的输出。
    32 loss=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=prediction))
    33 #使用梯度下降法训练
    34 train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)
    35 
    36 #初始化变量
    37 init = tf.global_variables_initializer()
    38 
    39 #结果存在一个布尔型的列表中
    40 correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1)) #argmax返回一个张量中最大值存在的位置
    41 
    42 #求准确率
    43 accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) #将布尔型转换为float32, true->1 false ->0
    44 
    45 with tf.Session() as sess:
    46     sess.run(init)
    47 
    48     for epoch in range(21):
    49         for batch in range (n_batch):
    50             #获取每个batch的图片
    51             batch_xs,batch_ys = mnist.train.next_batch(batch_size)
    52             sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys})
    53 
    54         acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels})
    55         print("Iter " + str(epoch) + ",Testing Accuracy "+ str(acc))
    View Code

      dropout

    1 import tensorflow as tf
    2 from tensorflow.examples.tutorials.mnist import input_data
     1 #将二次代价函数替换成交叉熵
     2 # tf.nn.sigmod_cross_entropy_with_logits() 来表示跟sigmod搭配使用的交叉熵
     3 # tf.nn.softmax_cross_entropy_with_logits() 来表示跟softmax搭配使用的交叉熵
     4 #载入数据集
     5 #one_hot是将数据改成0-1的格式
     6 mnist = input_data.read_data_sets("MNIST_data",one_hot=True)
     7 
     8 #每个批次的大小
     9 batch_size = 100
    10 
    11 #计算一共有多少个批次
    12 n_batch = mnist.train.num_examples // batch_size
    13 
    14 #定义两个placeholder,一个图片是28x28=784
    15 x = tf.placeholder(tf.float32,[None,784])
    16 y = tf.placeholder(tf.float32,[None,10])
    17 keep_prob = tf.placeholder(tf.float32) #dropout的参数,表示多少神经元被激活,1 表示所有神经元都是工作的
    18 
    19 #创建一个简单的神经网络
    20 Weight_L1 = tf.Variable(tf.truncated_normal([784,2000],stddev=0.1))
    21 biases_L1 = tf.Variable(tf.zeros([2000])+0.1)
    22 Wx_plus_b_L1 = tf.nn.tanh(tf.matmul(x,Weight_L1) + biases_L1)
    23 L1_drop = tf.nn.dropout(Wx_plus_b_L1,keep_prob)
    24 
    25 
    26 Weight_L2 = tf.Variable(tf.truncated_normal([2000,2000],stddev=0.1))
    27 biases_L2 = tf.Variable(tf.zeros([2000])+0.1)
    28 Wx_plus_b_L2 = tf.nn.tanh(tf.matmul(L1_drop,Weight_L2) + biases_L2)
    29 L2_drop = tf.nn.dropout(Wx_plus_b_L2,keep_prob)
    30 
    31 
    32 Weight_L3 = tf.Variable(tf.truncated_normal([2000,1000],stddev=0.1))
    33 biases_L3 = tf.Variable(tf.zeros([1000])+0.1)
    34 Wx_plus_b_L3 = tf.nn.tanh(tf.matmul(L2_drop,Weight_L3) + biases_L3)
    35 L3_drop = tf.nn.dropout(Wx_plus_b_L3,keep_prob)
    36 
    37 Weight_L4 = tf.Variable(tf.truncated_normal([1000,10],stddev=0.1))
    38 biases_L4 = tf.Variable(tf.zeros([10])+0.1)
    39 prediction = tf.nn.softmax(tf.matmul(L3_drop,Weight_L4) + biases_L4)
    40 
    41 #二次代价函数
    42 #loss = tf.reduce_mean(tf.square(y-prediction))
    43 
    44 #交叉熵
    45 #首先看输入logits,它的shape是[batch_size, num_classes] ,一般来讲,就是神经网络最后一层的输入z。
    46 #另外一个输入是labels,它的shape也是[batch_size, num_classes],就是我们神经网络期望的输出。
    47 loss=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=prediction))
    48 #使用梯度下降法训练
    49 train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)
    50 
    51 #初始化变量
    52 init = tf.global_variables_initializer()
    53 
    54 #结果存在一个布尔型的列表中
    55 correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1)) #argmax返回一个张量中最大值存在的位置
    56 
    57 #求准确率
    58 accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) #将布尔型转换为float32, true->1 false ->0
    59 
    60 with tf.Session() as sess:
    61     sess.run(init)
    62 
    63     for epoch in range(21):
    64         for batch in range (n_batch):
    65             #获取每个batch的图片
    66             batch_xs,batch_ys = mnist.train.next_batch(batch_size)
    67             sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys,keep_prob:1.0})
    68 
    69         test_acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels,keep_prob:1.0})
    70         train_acc = sess.run(accuracy,feed_dict={x:mnist.train.images,y:mnist.train.labels,keep_prob:1.0})
    71 
    72         print("Iter " + str(epoch) + ",Testing Accuracy "+ str(test_acc)+", training Accuracy "+str(train_acc))
    View Code
    1 import tensorflow as tf
    2 from tensorflow.examples.tutorials.mnist import input_data
     1 #将二次代价函数替换成交叉熵
     2 # tf.nn.sigmod_cross_entropy_with_logits() 来表示跟sigmod搭配使用的交叉熵
     3 # tf.nn.softmax_cross_entropy_with_logits() 来表示跟softmax搭配使用的交叉熵
     4 #载入数据集
     5 #one_hot是将数据改成0-1的格式
     6 mnist = input_data.read_data_sets("MNIST_data",one_hot=True)
     7 
     8 #每个批次的大小
     9 batch_size = 100
    10 
    11 #计算一共有多少个批次
    12 n_batch = mnist.train.num_examples // batch_size
    13 
    14 #定义两个placeholder,一个图片是28x28=784
    15 x = tf.placeholder(tf.float32,[None,784])
    16 y = tf.placeholder(tf.float32,[None,10])
    17 
    18 #创建一个简单的神经网络
    19 Weight_L1 = tf.Variable(tf.zeros([784,10]))
    20 biases_L1 = tf.Variable(tf.zeros([10]))
    21 Wx_plus_b_L1 = tf.matmul(x,Weight_L1) + biases_L1
    22 prediction = tf.nn.softmax(Wx_plus_b_L1)
    23 
    24 
    25 
    26 #二次代价函数
    27 #loss = tf.reduce_mean(tf.square(y-prediction))
    28 
    29 #交叉熵
    30 #首先看输入logits,它的shape是[batch_size, num_classes] ,一般来讲,就是神经网络最后一层的输入z。
    31 #另外一个输入是labels,它的shape也是[batch_size, num_classes],就是我们神经网络期望的输出。
    32 loss=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=prediction))
    33 
    34 #使用梯度下降法训练
    35 #train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)
    36 #使用其他优化器
    37 train_step = tf.train.AdamOptimizer(1e-2).minimize(loss)
    38 
    39 #初始化变量
    40 init = tf.global_variables_initializer()
    41 
    42 #结果存在一个布尔型的列表中
    43 correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1)) #argmax返回一个张量中最大值存在的位置
    44 
    45 #求准确率
    46 accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) #将布尔型转换为float32, true->1 false ->0
    47 
    48 with tf.Session() as sess:
    49     sess.run(init)
    50 
    51     for epoch in range(21):
    52         for batch in range (n_batch):
    53             #获取每个batch的图片
    54             batch_xs,batch_ys = mnist.train.next_batch(batch_size)
    55             sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys})
    56 
    57         acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels})
    58         print("Iter " + str(epoch) + ",Testing Accuracy "+ str(acc))
    View Code

      继续优化网络,提高识别率

    1 import tensorflow as tf
    2 from tensorflow.examples.tutorials.mnist import input_data
     1 #将二次代价函数替换成交叉熵
     2 # tf.nn.sigmod_cross_entropy_with_logits() 来表示跟sigmod搭配使用的交叉熵
     3 # tf.nn.softmax_cross_entropy_with_logits() 来表示跟softmax搭配使用的交叉熵
     4 #载入数据集
     5 #one_hot是将数据改成0-1的格式
     6 mnist = input_data.read_data_sets("MNIST_data",one_hot=True)
     7 
     8 #每个批次的大小
     9 batch_size = 100
    10 
    11 #计算一共有多少个批次
    12 n_batch = mnist.train.num_examples // batch_size
    13 
    14 #定义两个placeholder,一个图片是28x28=784
    15 x = tf.placeholder(tf.float32,[None,784])
    16 y = tf.placeholder(tf.float32,[None,10])
    17 keep_prob = tf.placeholder(tf.float32) #dropout的参数,表示多少神经元被激活,1 表示所有神经元都是工作的
    18 #学习率的变量
    19 lr = tf.Variable(0.001,dtype = tf.float32)
    20 
    21 #创建一个简单的神经网络
    22 Weight_L1 = tf.Variable(tf.truncated_normal([784,500],stddev=0.1))
    23 biases_L1 = tf.Variable(tf.zeros([500])+0.1)
    24 Wx_plus_b_L1 = tf.nn.tanh(tf.matmul(x,Weight_L1) + biases_L1)
    25 L1_drop = tf.nn.dropout(Wx_plus_b_L1,keep_prob)
    26 
    27 
    28 Weight_L2 = tf.Variable(tf.truncated_normal([500,300],stddev=0.1))
    29 biases_L2 = tf.Variable(tf.zeros([300])+0.1)
    30 Wx_plus_b_L2 = tf.nn.tanh(tf.matmul(L1_drop,Weight_L2) + biases_L2)
    31 L2_drop = tf.nn.dropout(Wx_plus_b_L2,keep_prob)
    32 
    33 
    34 Weight_L3 = tf.Variable(tf.truncated_normal([300,10],stddev=0.1))
    35 biases_L3 = tf.Variable(tf.zeros([10])+0.1)
    36 #Wx_plus_b_L3 = tf.nn.tanh(tf.matmul(L2_drop,Weight_L3) + biases_L3)
    37 #L3_drop = tf.nn.dropout(Wx_plus_b_L3,keep_prob)
    38 
    39 #Weight_L4 = tf.Variable(tf.truncated_normal([300,10],stddev=0.1))
    40 #biases_L4 = tf.Variable(tf.zeros([10])+0.1)
    41 prediction = tf.nn.softmax(tf.matmul(L2_drop,Weight_L3) + biases_L3)
    42 
    43 #二次代价函数
    44 #loss = tf.reduce_mean(tf.square(y-prediction))
    45 
    46 #交叉熵
    47 #首先看输入logits,它的shape是[batch_size, num_classes] ,一般来讲,就是神经网络最后一层的输入z。
    48 #另外一个输入是labels,它的shape也是[batch_size, num_classes],就是我们神经网络期望的输出。
    49 loss=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=prediction))
    50 #使用梯度下降法训练
    51 #train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)
    52 #使用其他优化器
    53 train_step = tf.train.AdamOptimizer(lr).minimize(loss)
    54 
    55 
    56 #初始化变量
    57 init = tf.global_variables_initializer()
    58 
    59 #结果存在一个布尔型的列表中
    60 correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1)) #argmax返回一个张量中最大值存在的位置
    61 
    62 #求准确率
    63 accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) #将布尔型转换为float32, true->1 false ->0
    64 
    65 with tf.Session() as sess:
    66     sess.run(init)
    67 
    68     for epoch in range(51):
    69         sess.run(tf.assign(lr,0.001 * (0.95 ** epoch)))
    70         for batch in range (n_batch):
    71             #获取每个batch的图片
    72             batch_xs,batch_ys = mnist.train.next_batch(batch_size)
    73             sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys,keep_prob:1.0})
    74 
    75         learning_rate = sess.run(lr)
    76 
    77         test_acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels,keep_prob:1.0})
    78         train_acc = sess.run(accuracy,feed_dict={x:mnist.train.images,y:mnist.train.labels,keep_prob:1.0})
    79 
    80         print("Iter " + str(epoch) + ",Testing Accuracy "+ str(test_acc)+", training Accuracy "+str(train_acc))
    View Code

    三、tensorboard可视化

        tensorboard网络结构

    1 import tensorflow as tf
    2 from tensorflow.examples.tutorials.mnist import input_data
     1 #以3-2的程序为例介绍tensorboard的用法
     2 #载入数据集
     3 #one_hot是将数据改成0-1的格式
     4 mnist = input_data.read_data_sets("MNIST_data",one_hot=True)
     5 
     6 #每个批次的大小
     7 batch_size = 100
     8 
     9 #计算一共有多少个批次
    10 n_batch = mnist.train.num_examples // batch_size
    11 
    12 
    13 #*****要可视化网络结果,必须要用到命名空间***********
    14 with tf.name_scope('input'):
    15     #定义两个placeholder,一个图片是28x28=784
    16     x = tf.placeholder(tf.float32,[None,784],name='x-input')
    17     y = tf.placeholder(tf.float32,[None,10],name='y-input')
    18 
    19 #创建一个简单的神经网络
    20 with tf.name_scope('layer'):
    21     with tf.name_scope('wights'):
    22         Weight_L1 = tf.Variable(tf.zeros([784,10]),name='W')
    23     with tf.name_scope('biases'):
    24         biases_L1 = tf.Variable(tf.zeros([10]),name='b')
    25     with tf.name_scope('wx_plus_b'):
    26         Wx_plus_b_L1 = tf.matmul(x,Weight_L1) + biases_L1
    27     with tf.name_scope('softmax'):
    28         prediction = tf.nn.softmax(Wx_plus_b_L1)
    29 
    30 
    31 
    32 #二次代价函数
    33 #loss = tf.reduce_mean(tf.square(y-prediction))
    34 with tf.name_scope('loss'):
    35     loss=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=prediction))
    36 #使用梯度下降法训练
    37 with tf.name_scope('train'):
    38     train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)
    39 
    40 #初始化变量
    41 init = tf.global_variables_initializer()
    42 
    43 #结果存在一个布尔型的列表中
    44 with tf.name_scope('accuracy'):
    45     with tf.name_scope('correct_prediction'):
    46         correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1)) #argmax返回一个张量中最大值存在的位置
    47     with tf.name_scope('accuracy'):
    48         #求准确率
    49         accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) #将布尔型转换为float32, true->1 false ->0
    50 
    51 with tf.Session() as sess:
    52     sess.run(init)
    53     writer = tf.summary.FileWriter('C:/Users/zgyxf183/Desktop/logs',sess.graph)
    54     for epoch in range(1):
    55         for batch in range (n_batch):
    56             #获取每个batch的图片
    57             batch_xs,batch_ys = mnist.train.next_batch(batch_size)
    58             sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys})
    59 
    60         acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels})
    61         print("Iter " + str(epoch) + ",Testing Accuracy "+ str(acc))
    View Code

      tensorboard网络运行

    1 import tensorflow as tf
    2 from tensorflow.examples.tutorials.mnist import input_data
     1 #载入数据集
     2 mnist = input_data.read_data_sets("MNIST_data",one_hot=True)
     3 
     4 #每个批次的大小
     5 batch_size = 100
     6 #计算一共有多少个批次
     7 n_batch = mnist.train.num_examples // batch_size
     8 
     9 #参数概要
    10 def variable_summaries(var):
    11     with tf.name_scope('summaries'):
    12         mean = tf.reduce_mean(var)
    13         tf.summary.scalar('mean', mean)#平均值
    14         with tf.name_scope('stddev'):
    15             stddev = tf.sqrt(tf.reduce_mean(tf.square(var - mean)))
    16         tf.summary.scalar('stddev', stddev)#标准差
    17         tf.summary.scalar('max', tf.reduce_max(var))#最大值
    18         tf.summary.scalar('min', tf.reduce_min(var))#最小值
    19         tf.summary.histogram('histogram', var)#直方图
    20 
    21 #命名空间
    22 with tf.name_scope('input'):
    23     #定义两个placeholder
    24     x = tf.placeholder(tf.float32,[None,784],name='x-input')
    25     y = tf.placeholder(tf.float32,[None,10],name='y-input')
    26 
    27 with tf.name_scope('layer'):
    28     #创建一个简单的神经网络
    29     with tf.name_scope('wights'):
    30         W = tf.Variable(tf.zeros([784,10]),name='W')
    31         variable_summaries(W)
    32     with tf.name_scope('biases'):    
    33         b = tf.Variable(tf.zeros([10]),name='b')
    34         variable_summaries(b)
    35     with tf.name_scope('wx_plus_b'):
    36         wx_plus_b = tf.matmul(x,W) + b
    37     with tf.name_scope('softmax'):
    38         prediction = tf.nn.softmax(wx_plus_b)
    39 
    40 #二次代价函数
    41 # loss = tf.reduce_mean(tf.square(y-prediction))
    42 with tf.name_scope('loss'):
    43     loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=prediction))
    44     tf.summary.scalar('loss',loss)
    45 with tf.name_scope('train'):
    46     #使用梯度下降法
    47     train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)
    48 
    49 #初始化变量
    50 init = tf.global_variables_initializer()
    51 
    52 with tf.name_scope('accuracy'):
    53     with tf.name_scope('correct_prediction'):
    54         #结果存放在一个布尔型列表中
    55         correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1))#argmax返回一维张量中最大的值所在的位置
    56     with tf.name_scope('accuracy'):
    57         #求准确率
    58         accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
    59         tf.summary.scalar('accuracy',accuracy)
    60 
    61 #合并所有的summary
    62 merged = tf.summary.merge_all()
    63 
    64 with tf.Session() as sess:
    65     sess.run(init)
    66     writer = tf.summary.FileWriter('logs/',sess.graph)
    67     for epoch in range(51):
    68         for batch in range(n_batch):
    69             batch_xs,batch_ys =  mnist.train.next_batch(batch_size)
    70             summary,_ = sess.run([merged,train_step],feed_dict={x:batch_xs,y:batch_ys})
    71 
    72         writer.add_summary(summary,epoch)
    73         acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels})
    74         print("Iter " + str(epoch) + ",Testing Accuracy " + str(acc))
    View Code

      tensorboard可视化

    1 import tensorflow as tf
    2 from tensorflow.examples.tutorials.mnist import input_data
    3 from tensorflow.contrib.tensorboard.plugins import projector
      1 #载入数据集
      2 mnist = input_data.read_data_sets("MNIST_data/",one_hot=True)
      3 #运行次数
      4 max_steps = 1001
      5 #图片数量
      6 image_num = 3000
      7 #文件路径
      8 DIR = "C:/Users/zgyxf183/Documents/jupyter/tensorFlow Learning/"
      9 
     10 #定义会话
     11 sess = tf.Session()
     12 
     13 #载入图片
     14 embedding = tf.Variable(tf.stack(mnist.test.images[:image_num]), trainable=False, name='embedding')
     15 
     16 #参数概要
     17 def variable_summaries(var):
     18     with tf.name_scope('summaries'):
     19         mean = tf.reduce_mean(var)
     20         tf.summary.scalar('mean', mean)#平均值
     21         with tf.name_scope('stddev'):
     22             stddev = tf.sqrt(tf.reduce_mean(tf.square(var - mean)))
     23         tf.summary.scalar('stddev', stddev)#标准差
     24         tf.summary.scalar('max', tf.reduce_max(var))#最大值
     25         tf.summary.scalar('min', tf.reduce_min(var))#最小值
     26         tf.summary.histogram('histogram', var)#直方图
     27 
     28 #命名空间
     29 with tf.name_scope('input'):
     30     #这里的none表示第一个维度可以是任意的长度
     31     x = tf.placeholder(tf.float32,[None,784],name='x-input')
     32     #正确的标签
     33     y = tf.placeholder(tf.float32,[None,10],name='y-input')
     34 
     35 #显示图片
     36 with tf.name_scope('input_reshape'):
     37     image_shaped_input = tf.reshape(x, [-1, 28, 28, 1])
     38     tf.summary.image('input', image_shaped_input, 10)
     39 
     40 with tf.name_scope('layer'):
     41     #创建一个简单神经网络
     42     with tf.name_scope('weights'):
     43         W = tf.Variable(tf.zeros([784,10]),name='W')
     44         variable_summaries(W)
     45     with tf.name_scope('biases'):
     46         b = tf.Variable(tf.zeros([10]),name='b')
     47         variable_summaries(b)
     48     with tf.name_scope('wx_plus_b'):
     49         wx_plus_b = tf.matmul(x,W) + b
     50     with tf.name_scope('softmax'):    
     51         prediction = tf.nn.softmax(wx_plus_b)
     52 
     53 with tf.name_scope('loss'):
     54     #交叉熵代价函数
     55     loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=prediction))
     56     tf.summary.scalar('loss',loss)
     57 with tf.name_scope('train'):
     58     #使用梯度下降法
     59     train_step = tf.train.GradientDescentOptimizer(0.5).minimize(loss)
     60 
     61 #初始化变量
     62 sess.run(tf.global_variables_initializer())
     63 
     64 with tf.name_scope('accuracy'):
     65     with tf.name_scope('correct_prediction'):
     66         #结果存放在一个布尔型列表中
     67         correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1))#argmax返回一维张量中最大的值所在的位置
     68     with tf.name_scope('accuracy'):
     69         #求准确率
     70         accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))#把correct_prediction变为float32类型
     71         tf.summary.scalar('accuracy',accuracy)
     72 
     73 #产生metadata文件
     74 if tf.gfile.Exists(DIR + 'projector/projector/metadata.tsv'):
     75     tf.gfile.DeleteRecursively(DIR + 'projector/projector/metadata.tsv')
     76 with open(DIR + 'projector/projector/metadata.tsv', 'w') as f:
     77     labels = sess.run(tf.argmax(mnist.test.labels[:],1))
     78     for i in range(image_num):   
     79         f.write(str(labels[i]) + '\n')        
     80 
     81 #合并所有的summary
     82 merged = tf.summary.merge_all()   
     83 
     84 
     85 projector_writer = tf.summary.FileWriter(DIR + 'projector/projector',sess.graph)
     86 saver = tf.train.Saver()
     87 config = projector.ProjectorConfig()
     88 embed = config.embeddings.add()
     89 embed.tensor_name = embedding.name
     90 embed.metadata_path = DIR + 'projector/projector/metadata.tsv'
     91 embed.sprite.image_path = DIR + 'projector/data/mnist_10k_sprite.png'
     92 embed.sprite.single_image_dim.extend([28,28])
     93 projector.visualize_embeddings(projector_writer,config)
     94 
     95 for i in range(max_steps):
     96     #每个批次100个样本
     97     batch_xs,batch_ys = mnist.train.next_batch(100)
     98     run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
     99     run_metadata = tf.RunMetadata()
    100     summary,_ = sess.run([merged,train_step],feed_dict={x:batch_xs,y:batch_ys},options=run_options,run_metadata=run_metadata)
    101     projector_writer.add_run_metadata(run_metadata, 'step%03d' % i)
    102     projector_writer.add_summary(summary, i)
    103 
    104     if i%100 == 0:
    105         acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels})
    106         print ("Iter " + str(i) + ", Testing Accuracy= " + str(acc))
    107 
    108 saver.save(sess, DIR + 'projector/projector/a_model.ckpt', global_step=max_steps)
    109 projector_writer.close()
    110 sess.close()
    View Code

    四、卷积神经网络

    卷积神经网络应用于MNIST数据集分类

    1 import tensorflow as tf
    2 from tensorflow.examples.tutorials.mnist import input_data
      1 #将二次代价函数替换成交叉熵
      2 # tf.nn.sigmod_cross_entropy_with_logits() 来表示跟sigmod搭配使用的交叉熵
      3 # tf.nn.softmax_cross_entropy_with_logits() 来表示跟softmax搭配使用的交叉熵
      4 #载入数据集
      5 #one_hot是将数据改成0-1的格式
      6 mnist = input_data.read_data_sets("MNIST_data",one_hot=True)
      7 
      8 #每个批次的大小
      9 batch_size = 100
     10 
     11 #计算一共有多少个批次
     12 n_batch = mnist.train.num_examples // batch_size
     13 
     14 #初始化权值
     15 def weight_variable(shape):
     16     initial = tf.truncated_normal(shape,stddev=0.1)#生成一个截断的正态分布
     17     return tf.Variable(initial)
     18 
     19 #初始化偏移量
     20 def bias_variable(shape):
     21     initial = tf.constant(0.1,shape=shape)
     22     return tf.Variable(initial)
     23 
     24 
     25 #定义卷积层
     26 def conv2d(x,W):
     27     return tf.nn.conv2d(x,W,strides=[1,1,1,1],padding='SAME')
     28 
     29 #定义池化层
     30 def max_pool_2x2(x):
     31     return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')
     32 
     33 
     34 
     35 #定义两个placeholder,一个图片是28x28=784
     36 x = tf.placeholder(tf.float32,[None,784])
     37 y = tf.placeholder(tf.float32,[None,10])
     38 
     39 #改变x的格式转为4D的向量[batch, in_height, in_width, in_channels]`
     40 #输入的数据是784行的一列数据,要转换成 28x28
     41 x_image = tf.reshape(x,[-1,28,28,1])
     42 
     43 #初始化第一个卷积层的权值和偏置
     44 W_conv1 = weight_variable([5,5,1,32])#5*5的采样窗口,32个卷积核从1个平面抽取特征
     45 b_conv1 = bias_variable([32])#每一个卷积核一个偏置值
     46 
     47 
     48 #把x_image和权值向量进行卷积,再加上偏置值,然后应用于relu激活函数
     49 h_conv1 = tf.nn.relu(conv2d(x_image,W_conv1) + b_conv1)
     50 h_pool1 = max_pool_2x2(h_conv1)
     51 
     52 #初始化第二个卷积层的权值和偏置
     53 W_conv2 = weight_variable([5,5,32,64])#5*5的采样窗口,64个卷积核从32个平面抽取特征
     54 b_conv2 = bias_variable([64])#每一个卷积核一个偏置值
     55 
     56 #把h_pool1和权值向量进行卷积,再加上偏置值,然后应用于relu激活函数
     57 h_conv2 = tf.nn.relu(conv2d(h_pool1,W_conv2) + b_conv2)
     58 h_pool2 = max_pool_2x2(h_conv2)#进行max-pooling
     59 
     60 #28*28的图片第一次卷积后还是28*28,第一次池化后变为14*14
     61 #第二次卷积后为14*14,第二次池化后变为了7*7
     62 #进过上面操作后得到64张7*7的平面
     63 
     64 
     65 
     66 #初始化第一个全连接层的权值
     67 W_fc1 = weight_variable([7*7*64,1024])#上一层有7*7*64个神经元,全连接层有1024个神经元
     68 b_fc1 = bias_variable([1024])#1024个节点
     69 
     70 
     71 #把池化层2的输出扁平化为1维
     72 h_pool2_flat = tf.reshape(h_pool2,[-1,7*7*64])
     73 
     74 #求第一个全连接层的输出
     75 h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat,W_fc1) + b_fc1)
     76 
     77 
     78 #keep_prob用来表示神经元的输出概率
     79 keep_prob = tf.placeholder(tf.float32)
     80 h_fc1_drop = tf.nn.dropout(h_fc1,keep_prob)
     81 
     82 #初始化第二个全连接层
     83 W_fc2 = weight_variable([1024,10])
     84 b_fc2 = bias_variable([10])
     85 
     86 #计算输出
     87 prediction = tf.nn.softmax(tf.matmul(h_fc1_drop,W_fc2) + b_fc2)
     88 
     89 #二次代价函数
     90 #loss = tf.reduce_mean(tf.square(y-prediction))
     91 
     92 #交叉熵
     93 #首先看输入logits,它的shape是[batch_size, num_classes] ,一般来讲,就是神经网络最后一层的输入z。
     94 #另外一个输入是labels,它的shape也是[batch_size, num_classes],就是我们神经网络期望的输出。
     95 loss=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=prediction))
     96 #使用梯度下降法训练
     97 #train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)
     98 #使用其他优化器
     99 train_step = tf.train.AdamOptimizer(1e-4).minimize(loss)
    100 
    101 
    102 #初始化变量
    103 init = tf.global_variables_initializer()
    104 
    105 #结果存在一个布尔型的列表中
    106 correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1)) #argmax返回一个张量中最大值存在的位置
    107 
    108 #求准确率
    109 accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) #将布尔型转换为float32, true->1 false ->0
    110 
    111 with tf.Session() as sess:
    112     sess.run(init)
    113 
    114     for epoch in range(51):
    115 
    116         for batch in range (n_batch):
    117             #获取每个batch的图片
    118             batch_xs,batch_ys = mnist.train.next_batch(batch_size)
    119             sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys,keep_prob:0.7})
    120 
    121         #learning_rate = sess.run(lr)
    122 
    123         test_acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels,keep_prob:1.0})
    124         train_acc = sess.run(accuracy,feed_dict={x:mnist.train.images,y:mnist.train.labels,keep_prob:1.0})
    125 
    126         print("Iter " + str(epoch) + ",Testing Accuracy "+ str(test_acc)+", training Accuracy "+str(train_acc))
    View Code

      卷积神经网络可视化

    1 import tensorflow as tf
    2 from tensorflow.examples.tutorials.mnist import input_data
      1 mnist = input_data.read_data_sets('MNIST_data',one_hot=True)
      2 
      3 #每个批次的大小
      4 batch_size = 100
      5 #计算一共有多少个批次
      6 n_batch = mnist.train.num_examples // batch_size
      7 
      8 #参数概要
      9 def variable_summaries(var):
     10     with tf.name_scope('summaries'):
     11         mean = tf.reduce_mean(var)
     12         tf.summary.scalar('mean', mean)#平均值
     13         with tf.name_scope('stddev'):
     14             stddev = tf.sqrt(tf.reduce_mean(tf.square(var - mean)))
     15         tf.summary.scalar('stddev', stddev)#标准差
     16         tf.summary.scalar('max', tf.reduce_max(var))#最大值
     17         tf.summary.scalar('min', tf.reduce_min(var))#最小值
     18         tf.summary.histogram('histogram', var)#直方图
     19 
     20 #初始化权值
     21 def weight_variable(shape,name):
     22     initial = tf.truncated_normal(shape,stddev=0.1)#生成一个截断的正态分布
     23     return tf.Variable(initial,name=name)
     24 
     25 #初始化偏置
     26 def bias_variable(shape,name):
     27     initial = tf.constant(0.1,shape=shape)
     28     return tf.Variable(initial,name=name)
     29 
     30 #卷积层
     31 def conv2d(x,W):
     32     #x input tensor of shape `[batch, in_height, in_width, in_channels]`
     33     #W filter / kernel tensor of shape [filter_height, filter_width, in_channels, out_channels]
     34     #`strides[0] = strides[3] = 1`. strides[1]代表x方向的步长,strides[2]代表y方向的步长
     35     #padding: A `string` from: `"SAME", "VALID"`
     36     return tf.nn.conv2d(x,W,strides=[1,1,1,1],padding='SAME')
     37 
     38 #池化层
     39 def max_pool_2x2(x):
     40     #ksize [1,x,y,1]
     41     return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')
     42 
     43 #命名空间
     44 with tf.name_scope('input'):
     45     #定义两个placeholder
     46     x = tf.placeholder(tf.float32,[None,784],name='x-input')
     47     y = tf.placeholder(tf.float32,[None,10],name='y-input')
     48     with tf.name_scope('x_image'):
     49         #改变x的格式转为4D的向量[batch, in_height, in_width, in_channels]`
     50         x_image = tf.reshape(x,[-1,28,28,1],name='x_image')
     51 
     52 
     53 with tf.name_scope('Conv1'):
     54     #初始化第一个卷积层的权值和偏置
     55     with tf.name_scope('W_conv1'):
     56         W_conv1 = weight_variable([5,5,1,32],name='W_conv1')#5*5的采样窗口,32个卷积核从1个平面抽取特征
     57     with tf.name_scope('b_conv1'):  
     58         b_conv1 = bias_variable([32],name='b_conv1')#每一个卷积核一个偏置值
     59 
     60     #把x_image和权值向量进行卷积,再加上偏置值,然后应用于relu激活函数
     61     with tf.name_scope('conv2d_1'):
     62         conv2d_1 = conv2d(x_image,W_conv1) + b_conv1
     63     with tf.name_scope('relu'):
     64         h_conv1 = tf.nn.relu(conv2d_1)
     65     with tf.name_scope('h_pool1'):
     66         h_pool1 = max_pool_2x2(h_conv1)#进行max-pooling
     67 
     68 with tf.name_scope('Conv2'):
     69     #初始化第二个卷积层的权值和偏置
     70     with tf.name_scope('W_conv2'):
     71         W_conv2 = weight_variable([5,5,32,64],name='W_conv2')#5*5的采样窗口,64个卷积核从32个平面抽取特征
     72     with tf.name_scope('b_conv2'):  
     73         b_conv2 = bias_variable([64],name='b_conv2')#每一个卷积核一个偏置值
     74 
     75     #把h_pool1和权值向量进行卷积,再加上偏置值,然后应用于relu激活函数
     76     with tf.name_scope('conv2d_2'):
     77         conv2d_2 = conv2d(h_pool1,W_conv2) + b_conv2
     78     with tf.name_scope('relu'):
     79         h_conv2 = tf.nn.relu(conv2d_2)
     80     with tf.name_scope('h_pool2'):
     81         h_pool2 = max_pool_2x2(h_conv2)#进行max-pooling
     82 
     83 #28*28的图片第一次卷积后还是28*28,第一次池化后变为14*14
     84 #第二次卷积后为14*14,第二次池化后变为了7*7
     85 #进过上面操作后得到64张7*7的平面
     86 
     87 with tf.name_scope('fc1'):
     88     #初始化第一个全连接层的权值
     89     with tf.name_scope('W_fc1'):
     90         W_fc1 = weight_variable([7*7*64,1024],name='W_fc1')#上一场有7*7*64个神经元,全连接层有1024个神经元
     91     with tf.name_scope('b_fc1'):
     92         b_fc1 = bias_variable([1024],name='b_fc1')#1024个节点
     93 
     94     #把池化层2的输出扁平化为1维
     95     with tf.name_scope('h_pool2_flat'):
     96         h_pool2_flat = tf.reshape(h_pool2,[-1,7*7*64],name='h_pool2_flat')
     97     #求第一个全连接层的输出
     98     with tf.name_scope('wx_plus_b1'):
     99         wx_plus_b1 = tf.matmul(h_pool2_flat,W_fc1) + b_fc1
    100     with tf.name_scope('relu'):
    101         h_fc1 = tf.nn.relu(wx_plus_b1)
    102 
    103     #keep_prob用来表示神经元的输出概率
    104     with tf.name_scope('keep_prob'):
    105         keep_prob = tf.placeholder(tf.float32,name='keep_prob')
    106     with tf.name_scope('h_fc1_drop'):
    107         h_fc1_drop = tf.nn.dropout(h_fc1,keep_prob,name='h_fc1_drop')
    108 
    109 with tf.name_scope('fc2'):
    110     #初始化第二个全连接层
    111     with tf.name_scope('W_fc2'):
    112         W_fc2 = weight_variable([1024,10],name='W_fc2')
    113     with tf.name_scope('b_fc2'):    
    114         b_fc2 = bias_variable([10],name='b_fc2')
    115     with tf.name_scope('wx_plus_b2'):
    116         wx_plus_b2 = tf.matmul(h_fc1_drop,W_fc2) + b_fc2
    117     with tf.name_scope('softmax'):
    118         #计算输出
    119         prediction = tf.nn.softmax(wx_plus_b2)
    120 
    121 #交叉熵代价函数
    122 with tf.name_scope('cross_entropy'):
    123     cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=prediction),name='cross_entropy')
    124     tf.summary.scalar('cross_entropy',cross_entropy)
    125 
    126 #使用AdamOptimizer进行优化
    127 with tf.name_scope('train'):
    128     train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
    129 
    130 #求准确率
    131 with tf.name_scope('accuracy'):
    132     with tf.name_scope('correct_prediction'):
    133         #结果存放在一个布尔列表中
    134         correct_prediction = tf.equal(tf.argmax(prediction,1),tf.argmax(y,1))#argmax返回一维张量中最大的值所在的位置
    135     with tf.name_scope('accuracy'):
    136         #求准确率
    137         accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
    138         tf.summary.scalar('accuracy',accuracy)
    139 
    140 #合并所有的summary
    141 merged = tf.summary.merge_all()
    142 
    143 with tf.Session() as sess:
    144     sess.run(tf.global_variables_initializer())
    145     train_writer = tf.summary.FileWriter('logs/train',sess.graph)
    146     test_writer = tf.summary.FileWriter('logs/test',sess.graph)
    147     for i in range(1001):
    148         #训练模型
    149         batch_xs,batch_ys =  mnist.train.next_batch(batch_size)
    150         sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys,keep_prob:0.5})
    151         #记录训练集计算的参数
    152         summary = sess.run(merged,feed_dict={x:batch_xs,y:batch_ys,keep_prob:1.0})
    153         train_writer.add_summary(summary,i)
    154         #记录测试集计算的参数
    155         batch_xs,batch_ys =  mnist.test.next_batch(batch_size)
    156         summary = sess.run(merged,feed_dict={x:batch_xs,y:batch_ys,keep_prob:1.0})
    157         test_writer.add_summary(summary,i)
    158 
    159         if i%100==0:
    160             test_acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels,keep_prob:1.0})
    161             train_acc = sess.run(accuracy,feed_dict={x:mnist.train.images[:10000],y:mnist.train.labels[:10000],keep_prob:1.0})
    162             print ("Iter " + str(i) + ", Testing Accuracy= " + str(test_acc) + ", Training Accuracy= " + str(train_acc))
    View Code

      LSTM

    1 import tensorflow as tf
    2 from tensorflow.examples.tutorials.mnist import input_data
     1 #载入数据集
     2 mnist = input_data.read_data_sets("MNIST_data/",one_hot=True)
     3 
     4 # 输入图片是28*28
     5 n_inputs = 28 #输入一行,一行有28个数据
     6 max_time = 28 #一共28行
     7 lstm_size = 100 #隐层单元
     8 n_classes = 10 # 10个分类
     9 batch_size = 50 #每批次50个样本
    10 n_batch = mnist.train.num_examples // batch_size #计算一共有多少个批次
    11 
    12 #这里的none表示第一个维度可以是任意的长度
    13 x = tf.placeholder(tf.float32,[None,784])
    14 #正确的标签
    15 y = tf.placeholder(tf.float32,[None,10])
    16 
    17 #初始化权值
    18 weights = tf.Variable(tf.truncated_normal([lstm_size, n_classes], stddev=0.1))
    19 #初始化偏置值
    20 biases = tf.Variable(tf.constant(0.1, shape=[n_classes]))
    21 
    22 
    23 #定义RNN网络
    24 def RNN(X,weights,biases):
    25     # inputs=[batch_size, max_time, n_inputs]
    26     inputs = tf.reshape(X,[-1,max_time,n_inputs])
    27     #定义LSTM基本CELL
    28     lstm_cell = tf.contrib.rnn.core_rnn_cell.BasicLSTMCell(lstm_size)
    29 #    final_state[state, batch_size, cell.state_size]
    30 #    final_state[0]是cell state
    31 #    final_state[1]是hidden_state
    32 #    outputs: The RNN output `Tensor`.
    33 #       If time_major == False (default), this will be a `Tensor` shaped:
    34 #         `[batch_size, max_time, cell.output_size]`.
    35 #       If time_major == True, this will be a `Tensor` shaped:
    36 #         `[max_time, batch_size, cell.output_size]`.
    37     outputs,final_state = tf.nn.dynamic_rnn(lstm_cell,inputs,dtype=tf.float32)
    38     results = tf.nn.softmax(tf.matmul(final_state[1],weights) + biases)
    39     return results
    40 
    41 
    42 #计算RNN的返回结果
    43 prediction= RNN(x, weights, biases)  
    44 #损失函数
    45 cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction,labels=y))
    46 #使用AdamOptimizer进行优化
    47 train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
    48 #结果存放在一个布尔型列表中
    49 correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1))#argmax返回一维张量中最大的值所在的位置
    50 #求准确率
    51 accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))#把correct_prediction变为float32类型
    52 #初始化
    53 init = tf.global_variables_initializer()
    54 
    55 with tf.Session() as sess:
    56     sess.run(init)
    57     for epoch in range(6):
    58         for batch in range(n_batch):
    59             batch_xs,batch_ys =  mnist.train.next_batch(batch_size)
    60             sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys})
    61 
    62         acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels})
    63         print ("Iter " + str(epoch) + ", Testing Accuracy= " + str(acc))
    View Code
  • 相关阅读:
    需求分析作业01
    2016年秋季个人阅读计划
    个人总结
    梦断代码读后感03
    进度条16
    我的第一个小系统总结
    进度条15
    eclipse连接SqlServer2008(被它搞得惨兮兮)
    梦断代码读后感02
    Android ViewPager刷新解析
  • 原文地址:https://www.cnblogs.com/kang06/p/9373600.html
Copyright © 2011-2022 走看看