深度学习_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

原文地址:https://www.cnblogs.com/Dean0731/p/11747704.html

时间: 2024-11-18 21:39:38

深度学习_1_神经网络_1的相关文章

深度学习_1_神经网络_3_验证码识别

验证码识别 1,分割 2,整体识别 一张图片n个字母 即不再是一个目标值,是n个 ? 例:NZPP ? N ------>[0.01,0.02,0.03.......] 概率 N------->[0,0,0,0,1.......] one-hot编码 ? Z-------->[0.01,0.02,0.03.......] Z------->[0,1,0,0,0......] ? 最后得出n*26个概率 ? 交叉熵计算 ? 目标值:[0,0,0,1......] [0,0,0,1..

Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.1

3.Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.1 http://blog.csdn.net/sunbow0 Spark MLlib Deep Learning工具箱,是根据现有深度学习教程<UFLDL教程>中的算法,在SparkMLlib中的实现.具体Spark MLlib Deep Learning(深度学习)目录结构: 第一章Neural Net(NN) 1.源码 2.源码解析 3.实例 第二章D

Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.2

3.Spark MLlib Deep Learning Convolution Neural Network(深度学习-卷积神经网络)3.2 http://blog.csdn.net/sunbow0 第三章Convolution Neural Network (卷积神经网络) 2基础及源码解析 2.1 Convolution Neural Network卷积神经网络基础知识 1)基础知识: 自行google,百度,基础方面的非常多,随便看看就可以,只是很多没有把细节说得清楚和明白: 能把细节说清

Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.3

3.Spark MLlib Deep Learning Convolution Neural Network(深度学习-卷积神经网络)3.3 http://blog.csdn.net/sunbow0 第三章Convolution Neural Network (卷积神经网络) 3实例 3.1 测试数据 按照上例数据,或者新建图片识别数据. 3.2 CNN实例 //2 测试数据 Logger.getRootLogger.setLevel(Level.WARN) valdata_path="/use

深度学习之神经网络与支持向量机

深度学习之神经网络与支持向量机 引言:神经网络(Neural Network)与支持向量机(Support Vector Machines,SVM)是统计学习的代表方法.可以认为神经网络与支持向量机都源自于感知机(Perceptron).感知机是1958年由Rosenblatt发明的线性分类模型.感知机对线性分类有效,但现实中的分类问题通常是非线性的. 神经网络与支持向量机(包含核方法)都是非线性分类模型.1986年,Rummelhart与McClelland发明了神经网络的学习算法Back P

深度学习——人工神经网络再掀研究热潮

深度学习——人工神经网络再掀研究热潮 胡晓林 人工神经网络起源于上世纪40年代,到今天已经70年历史了.就像人的一生,经历了起起落落,有过辉煌,有过黯淡,有过嘈杂,有过冷清.总体说来,过去的20年中人工神经网络的研究不温不火,直到最近三五年,随着深度学习概念的提出,人工神经网络才又重新焕发生机,甚至再度掀起研究热潮.本文简述一下人工神经网络的“前世今生”,并简单展望一下它的未来. 第一个神经元模型是1943年McCulloch和Pitts提出的,称为threshold logic,它可以实现一些

《卷积神经网络的Python实现》PDF代码+《解析深度学习卷积神经网络原理与视觉实践》PDF分析

CNN正在革新几个应用领域,如视觉识别系统.自动驾驶汽车.医学发现.创新电子商务等.需要在专业项目或个人方案中利用复杂的图像和视频数据集来实现先进.有效和高效的CNN模型. 深度卷积网络DCNN是目前十分流行的深度神经网络架构,它的构造清晰直观,效果引人入胜,在图像.视频.语音.语言领域都有广泛应用. 深度学习,特别是深度卷积神经网络是人工智能的重要分支领域,卷积神经网络技术也被广泛应用于各种现实场景,在许多问题上都取得了超越人类智能的结果. <卷积神经网络的Python实现>作为深度学习领域

深度学习和神经网络的区别是什么

http://zhidao.baidu.com/link?url=_Y4TSDJGC66-Prh3sCKxmT6S3HbNBlMBpLfniFdBjEcK7eFBqbtNYNxy9e5hUY3u3MiDe8QEglEHcDb47brFuLGXWIXjF-v4BYWxvdiHjvS 这两个概念实际上是互相交叉的,例如,卷积神经网络(Convolutional neural networks,简称CNNs)就是一种深度的监督学习下的机器学习模型,而深度置信网(Deep Belief Nets,简称D

深度学习卷积神经网络大事件一览

深度学习(DeepLearning)尤其是卷积神经网络(CNN)作为近几年来模式识别中的研究重点,受到人们越来越多的关注,相关的参考文献也是层出不穷,连续几年都占据了CVPR的半壁江山,但是万变不离其宗,那些在深度学习发展过程中起到至关重要的推动作用的经典文献依然值得回味,这里依据时间线索,对CNN发展过程中出现的一些经典文献稍作总结,方便大家在研究CNN时追本溯源,在汲取最新成果的同时不忘经典. 首先这里给出CNN在发展过程中的一些具有里程碑意义的事件和文献: 对于CNN最早可以追溯到1986