TensorFlow入门及神经网络简介

#TensorFlow支持通过tf.Graph来创建新的计算图
import tensorflow as tf

g1 = tf.Graph()
with g1.as_default():
    #在计算图g1中定义一个名字叫做v的变量,是一个[1,2]的数组,并且初始值是0
    v = tf.get_variable("v",shape=[1,2], initializer=tf.zeros_initializer)

g2 = tf.Graph()
with g2.as_default():
    #在计算图g2中定义一个名字叫做v的变量,是一个[4,4]的数组,并且初始值是1
    v = tf.get_variable("v",shape=[4,4], initializer=tf.ones_initializer)

with tf.Session(graph=g2) as sess:#调用tf.Session读取计算图g2中的变量v
    tf.global_variables_initializer().run()
    with tf.variable_scope("", reuse=True):
        print(sess.run(tf.get_variable("v")))

输出结果:
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]


#TensorFlow中张量的使用
import tensorflow as tf

a = tf.constant([1,1])#创建一个计算,这个计算的结果是一个张量,保存在变量a中
b = tf.constant([2,2])
result = tf.add(a, b)#对张量a和b进行add运算,将结果储存在名字为result的张量中
print(result)

输出结果:Tensor("Add:0", shape=(2,), dtype=int32)(张量的输出并不是一个具体的值,而是一个张量的结构,这个输出的意思是,"add:0" 就说明了result这个张量是计算节点"add"输出的第一个结果,"shape"说明这个张量是个长度为2的一维数组,"type"说明了这个张量的类型)
在TensorFlow中,constant是一种计算方法,计算图的每一个节点都是一个计算方法,而计算方法的结果都储存在这个节点中,也就是计算方法中,而节点和节点之间的边就是计算方法和计算方法之间的某种联系,也就类似与函数的那个f,一个张量中有三个属性,name,shape,type,在进行计算时,一定要保障type要一样.
张量的使用方法
1,对中间结果的应用,提高了代码的可读性
2,上面我们说到,张量的输出是一个张量的结构,但是我们在有些情况下,,我们需要输出计算方法中的值,这时候我们将会用到TensorFlow中的一个运行模型--会话(session)

TensorFlow运行模型----会话(session)
import tensorflow as tf

a = tf.constant([1,1])#创建一个计算,这个计算的结果是一个张量,保存在变量a中
b = tf.constant([2,2])
result = tf.add(a, b)#对张量a和b进行add运算,将结果储存在名字为result的张量中
sess = tf.Session()#创建一个会话
sess.run(result)
print(sess.run(result))#输出张量中的内容
sess.close()#每次创建完一个会话后,一定要记得关闭这个会话,不然会占用系统资源

为了输出一个张量的内容这样显得就十分麻烦,而且如果程序异常关闭导致没有执行sess.close,那么资源就不会被释放,所以我们可以利用python语言中的上下文管理器来管理这个会话
import tensorflow as tf

with tf.Session() as sess:
#直接使用创建好的会话来计算关心的结果
    sess.run()
#不用在调用sess.close()来关闭会话
#当上下文退出后,会话将会自动关闭

TensorFlow游乐场以及神经网络简介
TensorFlow游乐场网址(http://playground.tensorflow.org)
使用神经网络解决分类问题的步骤
1,提取问题中的实体的特征向量作为神经网络的输入,在入门阶段,我们直接采用谷歌的数据集进行操作.
2,定义神经网络的结构,并定义如何从神经网络的输入得到输出,(例如卷积神经网络,我们是需要在输入层获取很多的特征向量,从而减少隐藏层的层数,还是说减少输入层的特征向量,增加隐藏层的层数)
3,通过训练数据来调整神经网络中的参数的取值(例如W权值和b)
4,使用训练好的神经网络来预测未知的数据.


通过代码实现前向传播算法(在TensorFlow中实现)
import tensorflow as tf

w1 = tf.Variable(tf.random_normal([2,3], stddev=1, seed=1))#构建一个方差为1, 2*3的一个随机矩阵w1
w2 = tf.Variable(tf.random_normal([3,1], stddev=1, seed=1))#构建一个方差为1, 3*1的一个随机矩阵w2

x = tf.constant([[0.7, 0.9],[3, 4]])#构建一个常量, 是一个二维矩阵,

a = tf.matmul(x, w1)#进行矩阵连乘
b = tf.matmul(a, w2)

with tf.Session() as sess:
    init_op = tf.global_variables_initializer()#变量和常量不同,变量需要在Session中初始化,这句代码是对代码中所有的变量进行初始化
    sess.run(init_op)
    print(sess.run(b))

通过TensorFlow训练神经网络模型

监督学习的重要思想:

在已知答案的标注数据集上,模型给出的预测结果要尽量接近真实的答案,通过调整神经网络中的参数,对训练数据进行拟合,可以使得模型对未知的样本提供预测的能力,

流程图的解释(神经网络学习的原理)

反向传播算法实现的是一个迭代的过程,在每次迭代的开始,首先会选取一小部分的训练数据,这一小部分的训练数据被称为一个batch(批处理),然后,这个batch会通过前向传播算法得到神经网络模型的预测结果,因为训练数据都是有正确答案标注的,所以可以计算出前向传播算法所计算出的预测值和实际值之间的差距,最后,基于预测值和真实值之间的差距,反向传播算法会相应的更新神经网络参数的取值,使在这个batch上神经网络模型的预测结果和真是答案更加接近.

猜你喜欢

转载自blog.csdn.net/White__Hacker/article/details/81151856