专栏首页cnblogs-技术博客深度学习_1_神经网络_1

深度学习_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 = ei/(求和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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 深度学习_1_Tensorflow_1

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

    ​ N ------>[0.01,0.02,0.03.......] 概率 N------->[0,0,0,0,1.......] one-hot编码

    Dean0731
  • tensorflow 测量工具,与自定义训练

    Dean0731
  • 独家 | 一文读懂TensorFlow基础

    本文长度为7196字,建议阅读10分钟 本文为你讲解如何使用Tensorflow进行机器学习和深度学习。 1. 前言 深度学习算法的成功使人工智能的研究和应用取...

    数据派THU
  • 独家 | 手把手教TensorFlow(附代码)

    上一期我们发布了“一文读懂TensorFlow(附代码、学习资料)”,带领大家对TensorFlow进行了全面了解,并分享了入门所需的网站、图书、视频等资料,本...

    数据派THU
  • 美还是丑?这有一个CNN开发的颜值评分器 | 实战

    在人工智能的发展越来越火热的今天,其中智能应用也在伴随着我们的生活,其中最具有代表性的便是图像识别,并且其中的应用比比皆是,如车站的人脸识别系统,交通的智能监控...

    AI科技大本营
  • 不怕学不会 使用TensorFlow从零开始构建卷积神经网络

    人们可以使用TensorFlow的所有高级工具如tf.contrib.learn和Keras,能够用少量代码轻易的建立一个卷积神经网络。但是通常在这种高级应用中...

    AiTechYun
  • TensorFlow2.X学习笔记(4)--TensorFlow低阶API之AutoGraph相关研究

    而Autograph机制可以将动态图转换成静态计算图,兼收执行效率和编码效率之利。

    MiChong
  • 【tensorflow2.0】张量的结构操作

    张量数学运算主要有:标量运算,向量运算,矩阵运算。另外我们会介绍张量运算的广播机制。

    绝命生
  • tensorflow之tf.tile\tf.slice等函数的基本用法解读

    解读: tensorflow中的tile()函数是用来对张量(Tensor)进行扩展的,其特点是对当前张量内的数据进行一定规则的复制。最终的输出张量维度不变。

    学到老

扫码关注云+社区

领取腾讯云代金券