第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > Python深度学习笔记04——tensorflow实现神经网络(壹)

Python深度学习笔记04——tensorflow实现神经网络(壹)

时间:2023-09-06 21:52:03

相关推荐

Python深度学习笔记04——tensorflow实现神经网络(壹)

文章目录

前言

一、神经网络基础

1、感知机模型

2、神经网络

二、简单神经网络的实现

1、API介绍

2、简单的神经网络实现手写数字图片识别

总结

前言

关于python深度学习(tensorflow 1.x版本)学习笔记04——神经网络(壹)

一、神经网络基础

1、感知机模型

感知机解决的是分类问题;线性回归解决的是回归问题。

应用:很容易解决与,或,非问题。

x1,x2两个特征值,w1,w2两个权值。

与:所有输入为1,输出为1,否则为0。w1=1,w2=1,阈值为1.5,只有输入(1,1)的输出值为1。

或:只要有一个为1,输出就为1。

异或问题:相同为0,不同为1,使用一个感知机无法很好的划分。(单个感知机解决不了的问题,可以增加感知机)

逻辑回归:sigmoid,激活函数,进行分类。

2、神经网络

神经网络是一种数学模型,是存在于计算机的神经系统,由大量的神经元相连接并进行计算,在外界信息的基础上,改变内部的结构,常用来对输入和输出间复杂的关系进行建模。神经网络由大量的节点和之间的联系构成,负责传递信息和加工信息,神经元也可以通过训练而被强化。

感知机-->神经元-->多个-->神经网络特点: 输入向量的维度和输入神经元的个数相同每个连接都有权值同一层神经元之间没有连接由输入层,隐层,输出层组成第N层和N-1层的所有神经元连接,也叫全连接层。组成: 结构:神经网络中的变量可以是神经元连接的权重激活函数:大部分神经网络模型具有一个短时间尺度的动力学规则,来定义神经元如何根据其他神经元的活动来改变自己的激励值。学习规则:学习规则制定了网络中的权值如何随着时间推进而调整。(反向传播算法)

神经网络被用于多分类问题:

某一个样本-->得出属于全部类别的每一个概率。(softmax).有多少个类别,输出就是多少个值。

神经网络APItf.nn:提供神经网络相关操作的支持,包括卷积操作(conv)、池化操作(pooling)、归一化、loss、分类操作、embedding、RNN、Evaluation。(能体会到一步一步怎么做的。)*(基础)tf.layers:主要提供的高层的神经网络,主要和卷积相关的,对tf.nn的进一步封装。tf.contrib:tf.contrib.layers提供能够将计算图中的网络层、正则化、摘要操作、是构建计算图的高级操作,但是tf.contrib包不稳定以及一些实验代码。

算法介绍:

正向传播:输入经过一层层的计算得出输出;

反向传播:从损失计算开始,梯度下降更新权重。

二、简单神经网络的实现

1、API介绍

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

特征加权:tf.matmul(a, b, name=None)+bias return:全连接结果,供交叉损失运算不需要激活函数(因为是最后的输出)

SoftMax计算、交叉熵:

tf.nn.softmax_cross_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(loss):最小化损失return:梯度下降op

2、简单的神经网络实现手写数字图片识别

import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_datadef full_connected():# 获取真实数据mnist = input_data.read_data_sets("./data/mnist/input_data", one_hot=True)# 1、建立数据的占位符 x [None,78] y_ture[NONE,10]with tf.variable_scope("data"):x = tf.placeholder(tf.int32, [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个样本的输出结果matrix[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_v2(labels=y_true, logits=y_predict))# 4. 梯度下降求出损失with tf.variable_scope("optimizer"):train_on = 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))# equal_list None个样本 [1,0,1,0,1,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)# 定义一个初始化变量的opinit_op = tf.global_variables_initializer()# 定义一个合并变量的opmerged = tf.summary.merge_all()# 开启会话去训练with tf.Session() as sess:# 初始化变量sess.run(init_op)# 建立events文件, 然后写入filewriter = tf.summary.FileWriter("./data/tmp/test", graph=sess.graph)# 迭代步数去训练,更新参数for i in range(2000):# 取出真实的特征值和目标值mnist_x, mnist_y = mnist.train.next_batch(50)# 运行train_on训练sess.run(train_on, feed_dict={x: mnist_x, y_true: mnist_y})# 写入每步训练的值summery = sess.run(merged, feed_dict={x: mnist_x, y_true: mnist_y})filewriter.add_summary(summery, i)print("训练第%d步, 准确率为:%f" % (i, sess.run(accuracy, feed_dict={x: mnist_x, y_true: mnist_y})))return Noneif __name__ == "__main__":full_connected()

总结

以上是通过学习视频《Python深度学习(tensorflow)》整理学习笔记(附:视频学习地址/video/BV1Wt411C75s/),关于利用tensorflow实现神经网络,本篇主要记录了感知机、神经网络的基本结构并利用代码实现简单的神经网络实现手写数字图片识别。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。