mnist deep convolutional cetwork源码说明
来源:互联网 发布:百度云盘加载数据失败 编辑:程序博客网 时间:2024/06/05 03:29
主要对mnist_deep代码中的conv2d,max_pool,dropout进行说明
代码来源:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/mnist/mnist_deep.py
说明参考:http://www.cnblogs.com/hellocwh/p/5564568.html
http://blog.csdn.net/mao_xiao_feng/article/details/53444333
http://blog.csdn.net/mao_xiao_feng/article/details/53453926
http://blog.csdn.net/lujiandong1/article/details/53223630
http://www.cnblogs.com/wuzhitj/p/6297992.html
# Copyright 2015 The TensorFlow Authors. All Rights Reserved.## Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License.# You may obtain a copy of the License at## http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License.# =============================================================================="""A deep MNIST classifier using convolutional layers.See extensive documentation athttps://www.tensorflow.org/get_started/mnist/pros"""# Disable linter warnings to maintain consistency with tutorial.# pylint: disable=invalid-name# pylint: disable=g-bad-import-orderfrom __future__ import absolute_importfrom __future__ import divisionfrom __future__ import print_functionimport argparseimport sysfrom tensorflow.examples.tutorials.mnist import input_dataimport tensorflow as tfFLAGS = Nonedef deepnn(x): """deepnn builds the graph for a deep net for classifying digits. Args: x: an input tensor with the dimensions (N_examples, 784), where 784 is the number of pixels in a standard MNIST image. Returns: A tuple (y, keep_prob). y is a tensor of shape (N_examples, 10), with values equal to the logits of classifying the digit into one of 10 classes (the digits 0-9). keep_prob is a scalar placeholder for the probability of dropout. """ # Reshape to use within a convolutional neural net. # Last dimension is for "features" - there is only one here, since images are # grayscale -- it would be 3 for an RGB image, 4 for RGBA, etc. x_image = tf.reshape(x, [-1, 28, 28, 1]) # First convolutional layer - maps one grayscale image to 32 feature maps. 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) # Pooling layer - downsamples by 2X. h_pool1 = max_pool_2x2(h_conv1) # Second convolutional layer -- maps 32 feature maps to 64. 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) # Second pooling layer. h_pool2 = max_pool_2x2(h_conv2) # Fully connected layer 1 -- after 2 round of downsampling, our 28x28 image # is down to 7x7x64 feature maps -- maps this to 1024 features. 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 - controls the complexity of the model, prevents co-adaptation of features. # dropout一般用在全连接层后面,其作用就是在每批数据输入时,让神经网络中的每个神经元以1-keep_prob的概率不工作,以此来防止过拟合. keep_prob = tf.placeholder(tf.float32) h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob) # Map the 1024 features to 10 classes, one for each digit W_fc2 = weight_variable([1024, 10]) b_fc2 = bias_variable([10]) y_conv = tf.matmul(h_fc1_drop, W_fc2) + b_fc2 return y_conv, keep_probdef conv2d(x, W): """conv2d returns a 2d convolution layer with full stride. input x: [batch, in_height, in_width, in_channels] filter W: [filter_height, filter_width, in_channels, out_channels] strides: [batch, in_height, in_width, in_channels], corresponding to the input x return: output[b, i, j, k] = sum_{di, dj, q} input[b, strides[1] * i + di, strides[2] * j + dj, q] * filter[di, dj, q, k] that is, the shape of output is the same as input, [batch, in_height, in_width, in_channels]. In fact, strides[1] and strides[2] is working usually, strides[0] = strides[3] = 1, and filter[2] = x[3] """ return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')def max_pool_2x2(x): """max_pool_2x2 downsamples a feature map by 2X. input x: [batch, in_height, in_width, in_channels] ksize: usually [1, height, width, 1] strides: strides[1] and strides[2] is working, strides[0] = strides[3] = 1 """ return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')def weight_variable(shape): """weight_variable generates a weight variable of a given shape.""" initial = tf.truncated_normal(shape, stddev=0.1) return tf.Variable(initial)def bias_variable(shape): """bias_variable generates a bias variable of a given shape.""" initial = tf.constant(0.1, shape=shape) return tf.Variable(initial)def main(_): # Import data mnist = input_data.read_data_sets(FLAGS.data_dir, one_hot=True) # Create the model x = tf.placeholder(tf.float32, [None, 784]) # Define loss and optimizer y_ = tf.placeholder(tf.float32, [None, 10]) # Build the graph for the deep net y_conv, keep_prob = deepnn(x) cross_entropy = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y_conv)) train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy) correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) with tf.Session() as sess: sess.run(tf.global_variables_initializer()) for i in range(20000): batch = mnist.train.next_batch(50) if i % 100 == 0: #here keep_prob=1.0, that is, dropout is not working train_accuracy = accuracy.eval(feed_dict={ x: batch[0], y_: batch[1], keep_prob: 1.0}) print('step %d, training accuracy %g' % (i, train_accuracy)) #here keep_prob=0.5, that is, dropout is working during training train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5}) #here keep_prob=1.0, dropout is not working during testing print('test accuracy %g' % accuracy.eval(feed_dict={ x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}))if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--data_dir', type=str, default='/tmp/tensorflow/mnist/input_data', help='Directory for storing input data') FLAGS, unparsed = parser.parse_known_args() tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)
0 0
- mnist deep convolutional cetwork源码说明
- Deep Learning——TensorFlow平台下MNIST的实现(改进)(基于convolutional neural network)
- Deep MNIST for Experts
- Deep MNIST for Experts解读(三):deepnn源码分析与AdamOptimizer
- tensorflow——Deep MNIST
- 【Deep Learning】Tensorflow MNIST测试
- Convolutional Networks for MNIST in Tensorflow
- Convolutional Networks for MNIST in Tensorflow
- ImageNet Classification with deep convolutional neural networks
- ImageNet Classification with Deep Convolutional neural Networks
- Spatial Pyramid Pooling in Deep Convolutional --- Spp_net
- ImageNet Classification with Deep Convolutional Neural Networks
- NVIDIA DIGITS2 Deep Convolutional Feature Visualization
- ImageNet Classification with Deep Convolutional nerual network
- ImageNet Classification with Deep Convolutional Neural Networks
- ImageNet Classification with Deep Convolutional Neural Networks
- Image Super-Resolution Using Deep Convolutional Networks
- ImageNet classification with deep convolutional neural network
- 【C语言】ABACADACAB编程问题
- 读书感悟:如何最高效的读完一本书
- linux下常用文本处理命令
- Android之Content和activity、service、Application关系和attachBaseContext函数调用的时候
- 18.[个人]C++线程入门到进阶(18)----线程函数:SuspendThread
- mnist deep convolutional cetwork源码说明
- opencv中houghlines函数返回的rho和theta
- 你好,再见;你好,幸会!
- 【C语言】C语言中3种作用域举例
- Caffe源码解读(十一):自定义一个layer
- linux shell脚本对未定义变量的判断以及if的用法
- 网狐6603、客户端创建房间、会陪分配到其他客户端已创建好的房间去
- Java static修饰初始块{}
- 19.[个人]C++线程入门到进阶(19)----线程函数:ResumeThread