TensorFlow首个程序深度解析

 最近入坑TensorFlow, 依葫芦画瓢,敲了一个第一个TensorFlow的程序,目标是为了理解机器学习和TF的编程方式。初学者可以参考,大神可以自动绕路。本文的目标并非从API的角度来解析TF运行,而是从机器学习的知识点来梳理机器学习用到的知识点。文中提到一些专业术语,例如权值、偏差、列向量


1. 目标:

 本程序构造一个1元2次方程y=x2-0.5的原始数据,然后构造一个最简单的神经网络,仅包含一个输入层、一个隐藏层和一个输出层。通过TF程序把权值(weights)和偏差(biases)学习出来

2. 构造数据

import tensorflow as tf
import numpy as np

x_data = np.linspace(-1, 1, 300) [:, np.newaxis]
noise = np.random.normal(0, 0.05, x_data.shape)
y_data = np.square(x_data) - 0.5 + noise

xs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1])
 在做训练的前提,必须要有数据,由于做试验,我们用Python的Numpy生成数据,首先生成二次方程中的x, 生成一个(-1, 1)的 等差数列的列向量(300个样本),然后生成和x维度相同的方差为0.05符合正太分布的偏差(噪声),最后根据生成的x数列生成符 合方程 y=x 2 -0.5的y。 切记y=x2-0.5一条假设方程,上述的数据是根据次相当于是一条y=ax2+b的方程(在这里a=1, b=-0.5)。在现实的情况是,我们通过数据采集方式知道x和y,但是并不知道x和y之间的关系(不知道a=1和b=-0.5)。我们的目标,就是知道x和y,一共300个样本数据,求出a和b


3. 构造网络

def add_layer(inputs, in_size, out_size, activation_function=None):
    weights = tf.Variable(tf.random_normal([in_size, out_size]))
    biases = tf.Variable(tf.zeros([1, out_size]) + 0.1)
    Wx_plus_b = tf.matmul(inputs, weights) + biases
    if activation_function is None:
        outputs = Wx_plus_b
    else:
        outputs = activation_function(Wx_plus_b)
    return outputs

h1 = add_layer(xs, 1, 20, activation_function=tf.nn.relu)
prediction = add_layer(h1, 20, 1, activation_function=None)

隐藏层定义如下:随机生成权值使之符合正太分布,同时存在0.1的噪声后,计算矩阵相乘的值,然后用relu作为激活函数输出到下层
       输出层定义如下: 随机生成权值使之符合正太分布,同时存在0.1的噪声后,计算矩阵相乘的值,直接输出
这里存在一个疑问,为什么这里这样的处理方式适合解决此问题?目前还没有得知

4. 

你可能感兴趣的:(TensorFlow首个程序深度解析)