• 深度学习_1_神经网络_1


    神经网络

    感知机

    解决分类问题

    http://playground.tensorflow.org

    神经网络

    定义:

    ​ 在机器学习领域和认知科学领域,人工神经网络(artificial neural network) 简称ann或类神经网络,一种放生物 神经网络的结构和功能的计算模型,用于对函数进行估计或近似.

    种类:

    • ​ 基础神经网络:单层感受器,线性神经网络,BP神经网络,Hopfield神经网络
    • ​ 进阶神经网络:玻尔兹曼机,受限玻尔兹曼机,递归神经网络
    • 深度神经网络:深度置信网络,卷积神将网络,循环神将网络,LSTM网络

    神经网络的特点

    • ​ 输入向量的维度和输入神经元的个数相同
    • ​ 每个链接都有权值
    • ​ 同一层神经元之间没有连接
    • ​ 有输入层,隐层,输出层组成
    • ​ 第N层与第N-1层的所有神经元链接,也叫全连接

    组成

    • ​ 结构(Architecture):神经网络中的权重,神经元等等

    • ​ 激活函数(Activity Rule)

    • ​ 学习规则(Learning Rule)学习规则指定了网络中的权重如何随着时间的推移而调整(反向传播算法)

    全连接层有多少个圆,最后就有多少输出

    神将网络API模块

    • ​ tf.nn:提供神经网络相关操作的支持,包括卷积操作(conv),池化操作(pooling),归一化,loss,分类操作,embedding,RNN,Evaluation. (底层一点)
    • ​ tf.layers:主要提供高层的神经网络,主要和卷积线管的,对tf.nn的进一步封装(高级一点)
    • ​ tf.contrib:tf.contrib.layers 提供够将计算图中的网络层,正则化,摘要操作,是构建计算图的高级操作,但是tf.contrib包不稳定以及一些实验代码

    浅层人工神经网络模型

    • ​ softmax回归 (主要解决分类)

      Si = e^i/(求和j^(e^j))

    • ​ 损失计算api

    • ​ 其他api介绍

    简单的神经网络实现手写数字识别

    1,API介绍

    • 全连接-从输入直接到输出

    tf.matmul(a,b,name=None)+bias 特征加权

    ​ return:全连接结果,供交叉损失运算

    不需要激活函数(因为是最后的输出)

    • SoftMax计算,交叉熵

    tf.nn.softmax_corss_entropy_with_logits(labels=None,logits=None,name=None) 计算logits和labels之间的交叉损失熵

    ​ labels:标签值(真实值)

    ​ logits:样本值:样本加权之后的值

    ​ return:返回损失函数列表

    • 损失列表平均值计算

    tf.reduce_mean(input_tensor)

    • 损失下降API

    tf.train.GradientDescentOptimizer(learning_rate) 梯度下降优化

    ​ learning_rate:学习率

    ​ minimize:最小优化损失

    ​ return:梯度下降op

    2,Minst手写数字识别

    • 数据集 http://yann.lecun.com/exdb/mnist 55000训练集 10000测试集 每行包含两个部分,图片 标签

    • 数据读取

      from tensorflow.example.tutorials.minst import imput_data

      mnist = input_data.read_data_sets(FLAGS.data_dir,one_hot=True) 使用API读取

    • 准确率计算

      equal_list = tf.equal(tf.argmax(y,1),tf.argmax(y_label,1)) 1表示按照列比较,返回一个None的 数值的列表,为1表示该样本预测正确,0错误

      输入真实的结果(在本例中:每行是对应样本的一行ont_hot),和预测矩阵 每个样本的预测值

      accuracy=tf.tf.reduce_mean(tf.cast(equal_list,tf.float32)) 准确率

    • 简单实例深度神经网络

      def simplePictureRecoginze():
          from tensorflow.examples.tutorials.mnist import input_data
          mnist = input_data.read_data_sets(r"I:人工智能数据mnist_65000_28_28_simple_number", one_hot=True)
          # mnist.train.image 60000 行 784 列
          # mnist.train.image[0]获取具体的一张图片
          # mnist.train.labels 60000 行 10 列
          # mnist.train.next_batch(50)  返回两个二维数组,50张图片,50张图片标签对应的ont_hot编码
          import tensorflow as tf
          FLAGS=tf.flags.FLAGS
          tf.flags.DEFINE_integer("is_train",1,"指定程序是预测还是训练")
          tf.flags._FlagValuesWrapper
          # 1,建立数据占位符x[None,748] y_true=[None,10]
          with tf.variable_scope("data"):
              x = tf.placeholder(tf.float32, [None, 784])
              y_true = tf.placeholder(tf.int32, [None, 10])
          # 2,建立全连接层的神经网络 w[784,10] b[10]
          with tf.variable_scope("fc_model"):
              # 随机初始化权重和偏执
              weight = tf.Variable(tf.random_normal([784, 10], mean=0.0, stddev=1.0), name="w")
              bias = tf.Variable(tf.constant(0.0, shape=[10]))
      
              # 预测None个样本的输出结果 [None,784]*[784,10]+[10] = [None,10]
              y_predict = tf.matmul(x, weight) + bias
          # 3,求出所有样本的损失,求平均值
          with tf.variable_scope("soft_cross"):
              # 求平均值交叉熵损失
              loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_true, logits=y_predict))
          # 4,梯度下降求出损失
          with tf.variable_scope("optimizer"):
              train_op = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
          # 5,计算准确率
          with tf.variable_scope("acc"):
              equal_list = tf.equal(tf.argmax(y_true, 1), tf.argmax(y_predict, 1))
              accuracy = tf.reduce_mean(tf.cast(equal_list, tf.float32))
          # 收集变量
          tf.summary.scalar("losses",loss)
          tf.summary.scalar("acc",accuracy)
          # 高纬度变量收集
          tf.summary.histogram("weights",weight)
          tf.summary.histogram("biases",bias)
      
          # 定义一个初始化变量的op
          init_op = tf.global_variables_initializer()
          # 定义合并变量的op
          merge = tf.summary.merge_all()
          # 创建saver保存模型
          save = tf.train.Saver()
          # 开启会话训练
          with tf.Session() as sess:
              sess.run(init_op)
              # 迭代步数取训练,更新参数预测
              # 建立events文件,写入
              events = r"./summary"
              model = r"./Model/ckpt"
              filewriter = tf.summary.FileWriter(events,graph=sess.graph)
              if FLAGS.is_train  == 1:
                  for i in range(2000):
                      # 取出特征值,目标值
                      mnist_x, mnist_y = mnist.train.next_batch(50)
                      feed_dict = {x: mnist_x, y_true: mnist_y}
                      # 运行训练
                      sess.run(train_op, feed_dict=feed_dict)
                      print("训练第%d的次,准确率为:%f"%(i,sess.run(accuracy,feed_dict=feed_dict)))
                      # 写入每部训练的值
                      summary = sess.run(merge,feed_dict=feed_dict)
                      filewriter.add_summary(summary,i)
                  # 保存模型
                  save.save(sess, model)
              else:
                  # 加载模型
                  save.restore(sess,model)
                  # 如果是0,做出预测
                  for i in range(100):
                      # 每次测试一张图片
                      x_test,y_test = mnist.test.next_batch(1)
                      print("第%d张图片,手写数字目标是:%d,预测结果是:%d" % (i,
                          tf.argmax(y_test,1).eval(),
                          tf.argmax(sess.run(y_predict,feed_dict={x:x_test,y_true: y_test}),1).eval())
                            )
          return None
      
  • 相关阅读:
    全网通5X_AL10 非定制版 固件汇总
    system.new.dat解压工具sdat2img
    linux 平台中 Android5.0的更新包中system.new.dat文件的解包
    【 henuacm2016级暑期训练-动态规划专题 A 】Cards
    【BZOJ 1486】 [HNOI2009]最小圈
    【BZOJ 1433】[ZJOI2009]假期的宿舍
    【BZOJ 1412】[ZJOI2009]狼和羊的故事
    【BZOJ 1305】[CQOI2009]dance跳舞
    【Codeforces Round #483 (Div. 2) C】Finite or not?
    【Codeforces Round #482 (Div. 2) C】Kuro and Walking Route
  • 原文地址:https://www.cnblogs.com/Dean0731/p/11747704.html
Copyright © 2020-2023  润新知