1. tensorflow中最基本的三个概念
计算图(tf.Graph) 、张量( tf.Tensor) 、会话 ( tf.session)
计算图
计算图的每一个节点都是一个运算,计算图的边则表示了运算之间的传递关系。
张量
张量是一个多维数组,主要保存三个属性:名字、维度、类型(类型一旦定义不能改变)。
在张量中并没有真正保存数字,它保存的是如何得到这些数字的计算过程。
a=tf.constant([1.0,2.0],name="a")
会话
通过会话来执行定义好的运算,会话拥有并管理Tensorflow程序运行时的所有资源。
#创建会话
with tf.Session() as sess:
#使用创建好的会话来计算结果
sess.run(...)
利用Tensorflow实现一个完整的神经网络
> import tensorflow as tf from numpy.random import RandomState
>
> batch_size=8
>
> w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
> w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))
>
> x=tf.placeholder(tf.float32,shape=(None,2),name='x-input')
> y_=tf.placeholder(tf.float32,shape=(None,1),name='y-input')
>
> a=tf.matmul(x,w1) y=tf.matmul(a,w2)
>
> cross_entropy=-tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,1e-10,1.0)))
> train_step=tf.train.AdamOptimizer(0.001).minimize(cross_entropy)
>
> rdm=RandomState(1) dataset_size=128 X=rdm.rand(dataset_size,2)
> Y=[[int(x1+x2<1)]for(x1,x2)in X]
>
> with tf.Session() as sess:
> init_op=tf.initialize_all_variables()
> sess.run(init_op)
> print (sess.run(w1))
> print (sess.run(w2))
>
> STEPS=5000
> for i in range(STEPS):
> start=(i*batch_size)%dataset_size
> end=min(start+batch_size,dataset_size)
>
> sess.run(train_step,feed_dict={x:X[start:end],y_:Y[start:end]})
> if i%1000==0:
> total_cross_entropy=sess.run(cross_entropy,feed_dict={x:X,y_:Y})
> print("After%d training step(s),cross entropy on all data is %g"%(i,total_cross_entropy))
>
> print (sess.run(w1))
> print (sess.run(w2))
注意:
(1)python版本不同语法可能有会微小的差异。
print sess.run(w1) / print (sess.run(w1))
(2)“ tab” 键和空格不能混用。
===============================================================================================
乱七八糟:
全连接:相邻两层之间任意两个节点之间都有连接
向前传播算法可以表示为矩阵乘法
a=tf.matmul(x,w1)
y=tf.matmul(a,w2)
设置神经网络参数的过程就是神经网络的训练过程
通过前向传播算法得到神经网络的预测结果,基于预测值和真实值之间的差距反向传播算法会更新神经网络参数。
===============================================================================================
深层神经网络
深度学习:多层和非线性
线性模型的局限性:现实中,绝大部分问题是无法线性分割的。
激活函数(非线性)
激活函数可以实现去线性化
a=tf.nn.relu(tf.matmul(x,w1)+biases1)
y=tf.nn.relu(tf.matmul(a,w2)+biases2)
常见的非线性激活函数:
多层网络解决异或问题
异或运算:
同时为正或者同时为负====》0
否则(一个正一个负)====》1
损失函数
神经网络模型效果以及优化的目标是通过损失函数来定义的