zoukankan      html  css  js  c++  java
  • 第一个TensorFlow程序

    第一个TensorFlow程序

    TensorFlow的运行方式分为如下4步:
    (1)加载数据及定义超参数
    (2)构建网络
    (3)训练模型
    (4)评估模型和进行预测

    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
    
    #接下来定义x和y的占位符来作为将要输入神经网络的变量
    xs=tf.placeholder(tf.float32,[None,1])
    ys=tf.placeholder(tf.float32,[None,1])
    
    #构建网络模型
    #构建一个隐藏层和一个输出层
    #作为神经网络中的层,输入参数应该有4个变量:输入数据、输入数据的维度、输出数据的维度和激活函数
    #每一层经过向量化(y=weight*x+biases)的处理,并且经过激活函数的非线性化处理后,最终得到输出数据。
    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
    
    #构建隐藏层,假设有10个神经元
    h1=add_layer(xs,1,20,activation_function=tf.nn.relu)
    
    #构建输出层
    prediction=add_layer(h1,20,1,activation_function=None)
    
    #构建损失函数:计算输出层的预测值和真实值之间的误差,对二者差的平方求和再取平均,得到损失函数。
    #运用梯度下降法,以0.1的效率最小化损失
    loss=tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction),reduction_indices=[1]))
    train_step=tf.train.GradientDescentOptimizer(0.1).minimize(loss)
    
    
    #训练模型
    #TF训练1000次,每50次输出训练的损失值
    init=tf.global_variables_initializer()#初始化所有变量
    sess=tf.Session()
    sess.run(init)
    for i in range(1000):
        sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
        if i%50==0:
            print(sess.run(loss,feed_dict={xs:x_data,ys:y_data}))
    
    
    

    0.194179
    0.00892639
    0.00714868
    0.00584467
    0.00474677
    0.00424151
    0.00397673
    0.00376577
    0.00367131
    0.00362922
    0.00359284
    0.00356307
    0.00353341
    0.00350975
    0.00349089
    0.00347355
    0.00345795
    0.00344346
    0.00343009
    0.0034147

    超参数hyper-parameters的设定

    超参数就是指机器学习模型里的框架参数。
    需要手动设定,不断试错。

    学习率learning rate

    学习率是一个最常设定的超参数,学习率设置的越大,训练时间越短,速度越快;而学习率设置的越小,训练的准确度越高。先设置0.01,观察损失值的变化,然后尝试0.001,0.0001,最终确定一个比较合适的学习率。

    也可以设置可变的学习率。例如,在训练过程中,记录最佳的准确率,在连续n epoch没有达到最佳的准确率时,便可以认为准确率不再提高,就可以停止训练,称为“early stopping”。此时,让学习率减半,下一次满足时再减半,这样在逐渐解决最优解时,学习率越来越小,准确度就越来越高。

    mini-batch大小

    mini-batch大小,每批大小决定了权重的更新规则。批次越大,训练越快,但是权值更新频率略低。如何选择批次?需要根据硬件性能以及数据集的大小来设定。

    正则项系数regularization parameter,λ

    一般在较复杂的网络发现了明显的过拟合,可以考虑增加此项。初学者可以一开始设置为0,然后确定好一个比较好的学习率后,再给λ一个值,随后根据准确率再精细调整。

  • 相关阅读:
    HDFS文件操作(基本文件命令)
    <a> 标签
    css text-overflow
    zepto.js 打包自定义模块
    CSS3 box-sizing
    CSS3 Filter
    JQ 导出 Excel
    outline css2
    iphone 操作手势种类
    动手写一个简单的Web框架(模板渲染)
  • 原文地址:https://www.cnblogs.com/Ann21/p/10483363.html
Copyright © 2011-2022 走看看