以下为萌新初学神经网络的学习笔记。
神经网络tensorflow简介:
**1、**人的神经网络大致可以分为三部分:
传入神经——>神经中枢——>传出神经。
**2、**同样的,对于机器的神经网络而言,也存在这样的三个部分:
Input layer——>Hidden layer——>Output layer
一、Hidden layer(该图片为网图)
隐含层就相当于人的神经中的神经中枢,在隐含层中,含有很多个节点。大概可以把这些节点都看作是人脑中的神经元,通过这些节点来构成不同的处理方式。对于机器学习而言,人类自己来设计这些节点,给机器思考的方向,再通过给定数据,让机器自己根据这些数据和已经形成的思维方式来处理这些数据得出想要的结果。
1、圆形或方形的节点被称为node,在node中流动的数据流被称为张量(tensor)
2、tensor与node之间的关系:
如果输入tensor的维度是5000×64 5000 \times 645000×64,表示有5000个训练样本,每个样本有64个特征,则输入层必须有64个node来接受这些特征。
上图表示的三层网络包括:输入层(图中的input)、隐藏层(这里取名为ReLU layer表示它的激活函数是ReLU)、输出层(图中的Logit Layer)。
可以看到,每一层中都有相关tensor流入Gradient节点计算梯度,然后这些梯度tensor进入SGD Trainer节点进行网络优化(也就是update网络参数)。
Tensorflow正是通过graph表示神经网络,实现网络的并行计算,提高效率。下面我们将通过一个简单的例子来介绍TensorFlow的基础语法。
二、代码简例。
讲了那么多,通过简单的代码来了解一下:
import tensorflow as tf
const = tf.constant(2.0, name='const')# 创建一个TensorFlow常量=>2
b = tf.Variable(2.0, name='b')
c = tf.Variable(1.0, dtype=tf.float32, name='c')# 创建TensorFlow变量b和c
# 定义运算
d = tf.add(b, c, name='d')
e = tf.add(c, const, name='e')
a = tf.multiply(d, e, name='a')# 创建operation
init_op = tf.global_variables_initializer()# 1. 定义init operation
# tf.Session()函数创建一个会话(session)
with tf.Session() as sess:
# 2. 运行init operation
sess.run(init_op)
# 计算
a_out = sess.run(a)
print("Variable a is {}".format(a_out))
由于无法粘贴图片,我就直接复制输出结果:E:\untitled\venv\Scripts\python.exe E:/untitled/神经网络.py
WARNING:tensorflow:From E:\untitled\venv\lib\site-packages\tensorflow\python\framework\op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.
(警告好像可以通过输入以下代码解决:
old_v = tf.logging.get_verbosity()
tf.logging.set_verbosity(tf.logging.ERROR)#但依然存在版本问题。)
Instructions for updating:
Colocations handled automatically by placer.
2019-04-07 10:33:21.068289: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
(这段报错好像是因为我的pycharm中的tensorflow的版本问题造成的,但是能输出结果。)
Variable a is 9.0
Process finished with exit code 0
三、关于神经元素。
权值:权值开始是自动生成的,然后根据训练数据训练神经网络,在训练过程中神经网络会根据输出误差自动调整权值,以达到输出要求。所以权值是和训练数据相关的。
偏置:关于偏置的介绍,本人从下面的链接中的了解了些许
链接:https://www.jianshu.com/p/3c9c67b6b5dc
传递函数:关于传递函数中涉及的BP算法,本人也弄得不是很清楚。
a1~an为输入向量的各个分量
w1~wn为神经元各个突触的权值
b为偏置
f为传递函数,通常为非线性函数。一般有traingd(),tansig(),hardlim()。以下默认为hardlim()
t为神经元输出