TensorFlow构建AI程序极简入门

首先我们来做个猜数字的游戏。如图,已知上面4行数字【A,B,C,D】列,求第5行D列的值。

可以说,这是一个奥数题,A,B,C,D列之间应该是有隐藏规则的,数学敏锐的同学可能可以发现其规则为:

D =A *2 + B *3 +C * 4

因此,代入A=5, B=8, C=6 计算得出第5行的D列应该是60

在这个游戏里面,数学天赋是一个人的直觉,而我们本次实现的AI程序也具备这个“直觉功能 ”, 对于有任意隐藏规则的数据进行学习, 揣摩出隐藏规则之后,用于新输入数据的计算,并给出相同规则目标值的近似值。

import numpy as np

import tensorflow as tf

#训练输入表格中ABC列数据

X=np.mat([

[1.,4.,2.]

,[2.,2.,5.]

,[3.,5.,6.]

,[4.,8.,9.]

]).astype(np.float32)

#训练输出表格D列数据

Y=np.mat([

[22.]

,[30.]

,[45.]

,[68.]

]).astype(np.float32)

#预测输入数据

x_input=np.mat([

[5.,8.,6.]

]).astype(np.float32)

#预测输出数据 隐藏的规则: 第一个数 *2 + 第二个数 *3 + 第三个数 *4

# y_output=60

#模型的输入

xs = tf.placeholder(tf.float32,[None,3])

ys = tf.placeholder(tf.float32,[None,1])

#b初始化为0

b = tf.Variable(0,dtype=tf.float32)

#w指定为随机数,参数分别为 ([神经网络输入size,神经网络 输出size],随机值最小阀值, 随机值最大阀值)

w = tf.Variable(tf.random_uniform([3,1],0,1),dtype=tf.float32)

#计算x*w +b

z = tf.add(tf.matmul(xs,w),b)

#用relu函数进行激活

#计算loss值,采用差的平方,再求平均数

cost = tf.reduce_mean(tf.square(y-ys))

#定义反向传播的方法

train = tf.train.GradientDescentOptimizer(0.01).minimize(cost)

#启动TF

init = tf.global_variables_initializer()

session = tf.Session()

session.run(init)

#执行50000次反向传播,训练w,b

for i in range(50000):

session.run(train,feed_dict=)

#训练完毕后输入新值进行计算,得到预测结果

#打印预测结果58, 和60非常接近,预测成功

print session.run(predict)

大家可以尝试改变训练的数据,自己定义一些新的隐藏规则,如果不是太复杂的话,该程序应该基本都能识别(复杂的规则需要优化代码)。隐藏规则的载体是参数w和b, 这2个参数初始化为随机数和0,之后每次在for循环中运行都会进行有方向地改动,让所有行满足x(A,B,C) * w +b的结果和D的差异(平方差)最小。因此一旦w,b的最优解确定了, 对于新给出来第5行的A,B,C, 求出D=x(A,B,C) * w +b,D为同规则下的近似值。

AI从代码功能层次上看,就是要对数字隐藏规则的暴力识别,不管是图像识别,语音识别,写诗,翻译,问答等,归根到底,在AI程序中都会先把数据转换成一组存在隐藏规则的数字,之后成千上万次计算,暴力识别规则, 模拟规则的近似方案,然后用已识别的规则去匹配新的图片或者声音数据 ,从而得到判断的结果。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180105G0ARHK00?refer=cp_1026

扫码关注云+社区