PyCharm写Tensorflow简单程序

Tensorflow基本概念

使用图(graphs)来表示计算任务,在被称为会话的(Session)的context中执行图,tensor表示为数据,Variable表示状态,通过使用feed以及fetch进行任意的操作。

图(graphs)表示任务,一个graphs中的节点成为一个操作(opoperation),一个op会获得0个或多个数据(Tensor),同时会产生0个或多个数据(Tensor)。一个数据由一个n维的数组或列表构成,而图必须在Session中启动。

创建图,启动图

所需函数:

tf.constant(value, dtype, shape, name)(用于定义常量)

tf.matmul()(用于计算矩阵相乘)

m1我们创建为一个1行2列的矩阵,m2我们创建为2行1列的矩阵

使用tf.matmul来计算矩阵m1与矩阵m2的乘积。

但是按照我们以前的编程规则,print(product)应该能输出答案,但在Tensorflow中这是不行的,代码及输出结果如下图。

我们发现print不能输出答案,而输出了一个Tensor,原因是我们只创建了op而没有将op放入图以及会话中执行,下面我们将它放入图以及会话中来执行。

详细代码如下:

tf.Session()表示会话,括号中为空表示默认图。

一般情况我们使用默认图,所以我们不用定义图,使用默认图即可,使用run来执行op

答案输入为15

但如果这样编写代码,我们就一定要在末尾加上关闭操作。因此我们一般使用下面的代码。

With as 是会在会话执行完毕后自动关闭会话,不需要我们手动添加代码关闭,而我们也推荐大家使用这种编写方法。

变量

所需函数:

tf.Variable()(创建变量)

代码如下:

但是我们如果要想使用变量必须初始化,初始化我们使用下面的函数。

init = tf.global_variables_initializer()

随后在会话中也要优先进行变量初始化操作,即sess.run(init)

结果如下:

下面这一段代码我们实现了变量的自增(5次)。

赋值不能使用“=”来赋值。

注意在下面这一段代码中我们给state取了名counter,目前没有什么用,我们查阅API可以知道Tensorflow中许多函数都是可以取名的,但是取名在以后的实验中非常重要,大家可以多多留意。

Fetch and Feed

Fetch意思就是在一个会话(Session)中执行多个op。

代码如下:

result = sess.run([mul, add])

结果如下:

Feed的意思是流入。Tensorflow中我们可以提前声明几个tensor,但可以不赋值,使用占位符给他们空出位置,在使用run的时候再以字典的形式把值给传递过去。

占位符:

tf.placeholder()(可以不进行赋值等到run的时候再以字典的形式流入。)

代码如下:

其中

print(sess.run(output,feed_dict = {input1:[8. ], input2:[2. ]}))

这里就将8.0传入input1中,将2.0传入input2中。

结果如下:

大家一定要清楚了解Feed的使用,在以后的学习中Feed非常重要!

简单示例

代码如下:

 

这里解释一下这个程序实在做什么,我们给出了一个样本线性模型:y_data 这个使我们的目标函数,我们还创建了一个需要优化的线性模型:y 我们的目的是优化 y 使y这个线性模型能够接近于或者等于y_data 的分布。

在这个简单示例中我们使用了基础非常重要的函数 loss 以及 optimizrt

损失函数:

loss = tf. reduce_mean(tf.square(y_data - y))

y_data – y可以认为y_data是真实值 y 是预测值,两者相减则为则为误差值。

tf.square为平方。

tf. reduce_mean为求平均值。

经过这样的计算我们就求出了损失函数即二次代价函数的值,你可以将loss理解为预测值y与真实值y_data的差距有多大。

优化器:

Optimizrt = tf.train.GradientDescentOptimizer(0.2)(这里学习率为0.2)

这里我们使用了梯度下降法优化器以后我们也会经常使用这个优化器,有兴趣的同学可以提前了解,在这里我们先不详细说明。

最小化代价函数:

train = optimizer.minimize(loss)

该函数能够慢慢的调整参数(变量),来是loss达到尽可能小,它收敛的速度取决于优化器。这里修正的变量即为 kb

如果要使loss为最小即为0,则k b 就要修正为 y_data 中的0.10.2

所以上段代码的目的就是通过使用优化器来降低loss的值,loss越小,则越接近于样本函数y_data

下面我们来看迭代200次的结果:

我们每20次打印 kb 的值,在第200次的时候我们发现 kb 的值已经非常接近 真值 0.10.2 了。

通过以上4个示例,我们已经初步认识和使用tensorflow,而以后的深度学习中这个过程是非常重要的,希望各位同学能够加深理解,多多查阅资料。

猜你喜欢

转载自blog.csdn.net/charles_zhang_/article/details/92990474