人工智能感觉很神秘,作为google公司力推的人工智能框架tensorflow也受到很多人的关注.本文用一个最简单的例子,带领大家看看tensorflow是如何工作的.
如果你对人工智能的原理不了解可以看这篇文章人工智能-神经网络原理
首先导入tensorflow和numpy模块
import tensorflow as tf
import numpy as np
我们知道tensorflow的学习是由一些正确的数据去训练,大量训练之后才会根据之前的经验进行预测.所以我们先构造一些正确的数据.
x = np.random.rand(100).astype(np.float32)
y = x * 0.3 + 0.4
这里x是随机的数列,y是真实数据,也就是我们的训练样本.
下面我们来构造tensorflow中x与y的关系
Weights = tf.Variable(tf.random_uniform([1], -1, 1))
biases = tf.Variable(tf.zeros([1]))
y_prediction = Weights * x + biases
x是输入值,y是tensorflow预测的值.由于不知道x与y是何种关系,所以用两个变量表示,也就是经常听到的权重Weights和偏置值biases.
tf.Variable是tensorflow中的变量
接下来我们要表示出来预测的值与真实值的误差
loss = tf.reduce_mean(tf.square(y_prediction - y))
用预测出来的值减去真实值再平方,再求平均值,得出的值loss就是真实值与预测值的误差.其实这就是我们中学里学的方差.
tf.square是平方运算.tf.reduce_mean是求平均值.
那么接下来如何让预测值更接近真实值呢,当然是让loss越来越小
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
在这一步tensorflow会不断调整Weights和biases,去减少loss
GradientDescentOptimizer是优化器的一种,tensorflow有很多种方法去减少loss
接下来我们要初始化tensorflow的变量,这点与其他语言不一样,tensorflow的变量不会立刻分配内存,像先把设计图画完再开工
init = tf.global_variables_initializer()
激活神经网络
sess = tf.Session()
sess.run(init)
开始训练,我们训练200次,每次都会调用优化器调整权重和偏置值
我们每20步打印一次Weights,和biases的值
for step in range(200):
sess.run(train)
if step % 20 == 0:
print(step, sess.run(Weights), sess.run(biases))
训练到最后,我们发现tensorflow调整出来的Weights和biases非常接近与我们给定的0.3和0.4了,所以如果现在给一个x让tensorflow做预期,得到的y值也会很接近真实值.
本文链接:https://www.kupposhadow.com/post/5a22463ce717c51ff6741cf2