Tensorflow 构造一个简单的神经网络

来源:互联网 发布:二手书上哪里淘宝 编辑:程序博客网 时间:2024/06/08 17:42

神经层里常见的参数通常有weights、biases和激励函数。

看demo

#coding:utf-8import tensorflow as tf import numpy as np#定义添加神经层的函数def add_layer(),它有四个参数:#输入值、输入的大小、输出的大小和激励函数,我们设定默认的激励函数是Nonedef add_layer(inputs,input_size,output_seiz,activation_function = None):        #开始定义weights和biases    Weights = tf.Variable(tf.random_normal([input_size,output_seiz]))#in_size行, out_size列的随机变量矩阵    #机器学习中,biases的推荐值不为0,所以我们这里是在0向量的基础上又加了0.1    biases = tf.Variable(tf.zeros([1,output_seiz])+0.1)    #定义神经网络未激活的值。tf.matmul()是矩阵的乘法。    Wx_plus_b = tf.matmul(inputs,Weights)+biases    #当activation_function——激励函数为None时,输出就是当前的预测值——Wx_plus_b,    #不为None时,就把Wx_plus_b传到activation_function()函数中得到输出    if activation_function is None:        # None 表示线性关系 无需激励函数        output_seiz = Wx_plus_b    else:        output_seiz = activation_function(Wx_plus_b)    # 返回输出 添加一个神经层的函数——def add_layer()就定义好了。    return output_seizx_data = np.linspace(-1,1,300)[:,np.newaxis] #-1到1这个区间里有300个单位,维度 二维noise = np.random.normal(0, 0.05, x_data.shape).astype(np.float32) #噪点y_data = np.square(x_data)-0.5 #x_data的二次放 - 0.5#输入x_input = tf.placeholder(tf.float32,[None,1])y_input = tf.placeholder(tf.float32,[None,1])#简单的三层神经网络:# 输入层1个神经元 | 隐藏层假设10个神经元 | 输出层1个神经元#定义隐藏层layer_hint = add_layer(x_input,1,10,activation_function = tf.nn.relu)#定义输出层layer_output = add_layer(layer_hint,10,1,activation_function = None)loss =tf.reduce_mean(tf.reduce_sum(tf.square(y_input - layer_output),reduction_indices=[1]))#二者差的平方求和再取平均#每一个练习的步骤 通过 优化器以0.1的学习效率对误差进行更正提升,下一次就会有更好的结果。train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)#初始init = tf.global_variables_initializer()with tf.Session() as sess:    sess.run(init)    for i in range(1000):        sess.run(train_step, feed_dict={x_input:x_data,y_input:y_data})        if i% 50:            print sess.run(loss,feed_dict={x_input:x_data,y_input:y_data})

输出

1.02167
0.882461

0.164712

0.0363653

0.00902714

0.00333527

0.00140666
….
0.000842972
….
0.000661918

0.000372133

可以看出误差越来越小了