zoukankan      html  css  js  c++  java
  • CNN 理论

    我是半路出生的,看的理论方面的博客做个介绍:https://www.cnblogs.com/pinard/p/6483207.html

    https://blog.csdn.net/cxmscb/article/details/71023576

     看理论的话第一个博客就够了,第一个博主关于这方面的博客文章我前前后后看了大概十几遍吧,写的很好,能把我这样的渣渣带入门,我想大家也是可以的

    实践的话,建议大家去看极客http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mnist_beginners.html

    这个是MNIST机器学习入门的代码

    "导入数据集"
    import  tensorflow.examples.tutorials.mnist.input_data as input_data
    mnist = input_data.read_data_sets("MNIST_data/", one_hot = True)
    
    import  tensorflow as tf
    #  "占位符"
    x = tf.placeholder(tf.float32,[None, 784])
    
    # 权重和偏置量
    W =  tf.Variable(tf.zeros([784, 10 ]))
    b = tf.Variable(tf.zeros([10]))
    
    # softmax 模型
    y = tf.nn.softmax(tf.matmul(x, W) + b)
    
    # 交叉熵
    y_ = tf.placeholder("float",[None, 10])
    cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
    
    # 梯度下降算法以0.01的学习速率最小化交叉熵
    train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
    #初始化变量
    init = tf.global_variables_initializer()
    
    # 启动模型
    sess = tf.Session()
    sess.run(init)
    for i in range(1000):
        batch_xs, batch_ys = mnist.train.next_batch(100)
        sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
    
    
    
    correct_prediction = tf.equal(tf.argmax(y, 1),tf.argmax(y_, 1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction,"float"))
    print(sess.run(accuracy,feed_dict={x: mnist.test.images,y_: mnist.test.labels }))
    # 0.9042
    

      深入MNIST

    # -*- coding:utf-8-*-
    import  tensorflow.examples.tutorials.mnist.input_data as input_data
    mnist = input_data.read_data_sets("MNIST_data", one_hot = True)
    
    import  tensorflow as tf
    sess = tf.InteractiveSession()
    
    x = tf.placeholder("float", shape=[None, 784])
    y_ = tf.placeholder("float", shape=[None, 10])
    
    W = tf.Variable(tf.zeros([784, 10]))
    b = tf.Variable(tf.zeros([10]))
    
    sess.run(tf.global_variables_initializer())
    
    y = tf.nn.softmax(tf.matmul(x, W) + b)
    cross_entropy = - tf.reduce_sum(y_ * tf.log(y))
    
    train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
    
    for i in range(10000):
        batch = mnist.train.next_batch(90)
        train_step.run(feed_dict= {x: batch[0],y_:batch[1]})
    
    correct_predict = tf.equal(tf.argmax(y,1), tf.argmax(y_, 1))
    accuracy = tf.reduce_mean(tf.cast(correct_predict,"float"))
    print(accuracy.eval(feed_dict={x: mnist.test.images,y_:mnist.test.labels}))
    #0.9084   50  1000
    #0.9072   60   1000
    #0.908   70   1000
    #0.9135  80  1000
    #0.9151   84 1000
    #0.9175  85  1000
    #0.9142  86  1000
    #0.9133  90  1000
    #0.9026 100  1000
    
    #0.098       850  10000
    #0.9245      85 10000
    #0.924   90 10000
    

      

     基于mnist的CNN

    # -*- coding:utf-8-*-
    import  tensorflow.examples.tutorials.mnist.input_data as input_data
    mnist = input_data.read_data_sets("MNIST_data", one_hot = True)
    
    import  tensorflow as tf
    sess = tf.InteractiveSession()
    x = tf.placeholder("float", shape=[None, 784])
    y_ = tf.placeholder("float", shape=[None, 10])
    
    # 权重和偏置量初始化函数
    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)
    
    # 卷积和池化
    def conv2d(x,W):
        return tf.nn.conv2d(x,W,strides=[1,1,1,1],padding="SAME")
    
    def max_pool_2x2(x):
        return tf.nn.max_pool(x, ksize=[1,2,2,1],strides=[1,2,2,1],padding="SAME")
    
    # 第一层卷积
    W_conv1 = weight_variable([5,5,1,32])
    b_conv1 = bias_variable([32])
    x_image =tf.reshape(x, [-1, 28, 28, 1])
    h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
    h_pool1 = max_pool_2x2(h_conv1)
    
    # 第二层卷积
    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)
    h_pool2 = max_pool_2x2(h_conv2)
    
    # 密集连接层
    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
    keep_prob = tf.placeholder("float")
    h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)
    
    # 输出层
    W_fc2 = weight_variable([1024, 10])
    b_fc2 = bias_variable([10])
    
    y_conv = tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)
    
    cross_entropy = -tf.reduce_sum(y_ * tf.log(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,"float"))
    sess.run(tf.global_variables_initializer())
    for i in range(2000):
        batch = mnist.train.next_batch(50)
        if i%100 == 0:
            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))
        train_step.run(feed_dict={x: batch[0],y_:batch[1],keep_prob: 0.5})
    
    print("test accuracy %g" % accuracy.eval(feed_dict={x:mnist.test.images,y_:mnist.test.labels,keep_prob:1.0}))
    

      

    以上代码都是可以运行的,但是还是建议大家自己去写一次,理解各种函数的意义,将理论和事件结合起来

  • 相关阅读:
    区别@ControllerAdvice 和@RestControllerAdvice
    Cannot determine embedded database driver class for database type NONE
    使用HttpClient 发送 GET、POST、PUT、Delete请求及文件上传
    Markdown语法笔记
    Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
    Mysql 查看连接数,状态 最大并发数(赞)
    OncePerRequestFilter的作用
    java连接MySql数据库 zeroDateTimeBehavior
    Intellij IDEA 安装lombok及使用详解
    ps -ef |grep xxx 输出的具体含义
  • 原文地址:https://www.cnblogs.com/html-css-js/p/8834873.html
Copyright © 2011-2022 走看看