第一个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,然后确定好一个比较好的学习率后,再给λ一个值,随后根据准确率再精细调整。

第一个TensorFlow程序的更多相关文章

  1. 1、第一个TensorFlow程序

    import tensorflow as tf import os os.environ[' #去掉警告,将警告级别提升 a = tf.constant(2) #定义一个常量 b = tf.const ...

  2. hello tensorflow,我的第一个tensorflow程序

    上代码: import tensorflow as tf if __name__=='__main__': g = tf.Graph() # add ops to the user created g ...

  3. DirectX游戏编程(一):创建一个Direct3D程序

    一.环境 Visual Studio 2012,DirectX SDK (June 2010) 二.准备 1.环境变量(如没有配置请添加) 变量名:DXSDK_DIR 变量值:D:\Software\ ...

  4. 第一个python程序

    一个python程序的两种执行方式: 1.第一种方式是通过python解释器: cmd->python->进入python解释器->编写python代码->回车. 2.第二种方 ...

  5. 编写第一个MapReduce程序—— 统计气温

    摘要:hadoop安装完成后,像学习其他语言一样,要开始写一个“hello world!” ,看了一些学习资料,模仿写了个程序.对于一个C#程序员来说,写个java程序,并调用hadoop的包,并跑在 ...

  6. 1.3 第一个C#程序

    几乎没一门编程语言的第一个程序都叫“你好,世界”,所以先在visual studio 中创建一个Helloworld程序. 各部分的详细内容: Main方法是程序运行的起点,最重要的代码就写在Main ...

  7. 一个.net程序员的安卓之旅-Eclipse设置代码智能提示功能

    一个.net程序员的安卓之旅-代码智能提示功能 过完年回来就决心开始学安卓开发,就网上买了个内存条加在笔记本上(因为笔记本原来2G内存太卡了,装了vs2010.SQL Server 2008.orac ...

  8. MFC-01-Chapter01:Hello,MFC---1.3 第一个MFC程序(02)

    1.3.1 应用程序对象 MFC应用程序的核心就是基于CWinApp类的应用程序对象,CWinApp提供了消息循环来检索消息并将消息调度给应用程序的窗口.当包含头文件<afxwin.h>, ...

  9. Go! new Hello World, 我的第一个Go程序

    以下语句摘自百度百科: Go语言是谷歌2009发布的第二款开源编程语言. Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全.支持并行进 ...

随机推荐

  1. 爬虫系列(十) 用requests和xpath爬取豆瓣电影

    这篇文章我们将使用 requests 和 xpath 爬取豆瓣电影 Top250,下面先贴上最终的效果图: 1.网页分析 (1)分析 URL 规律 我们首先使用 Chrome 浏览器打开 豆瓣电影 T ...

  2. ecshop中{$lang.}标签的修改

    {$lang.}之类的文字都是在语言包里边定义的,所以要修改这些文字的话,我们只需要修改语言包里的文件.首先需要看一下你使用的语言是哪种,如果是中文的话,修改  languages/zh_cn/com ...

  3. vue自定义拖动指令

    1.在项目开发中,需要对div进行拖动.因为需要自定义组件 a>定义全局拖拽指令: 定义全局指令,需要在main.js中写入vue.directive('drag',{});即可.但是一般会在外 ...

  4. Git 基础教程 之 远程库更新到本地

    PS:git remote -v 查看远程仓库        git diff temp 比较master 分支与temp的不同 如果分支没有合并到主分支上,用        git branch - ...

  5. Leetcode 887 Super Egg Drop(扔鸡蛋) DP

    这是经典的扔鸡蛋的题目. 同事说以前在uva上见过,不过是扔气球.题意如下: 题意: 你有K个鸡蛋,在一栋N层高的建筑上,被要求测试鸡蛋最少在哪一层正好被摔坏. 你只能用没摔坏的鸡蛋测试.如果一个鸡蛋 ...

  6. WebFont与页面font-icon图标研究

    当你打开(绝大部分)网站,页面上将会有许多形形色色的小图标(icon),适当的icon的可以达到一图胜千言的目的,使网页的表现效果更佳. 关于页面icon的制作,比较传统的方法是,让设计师去设计一个个 ...

  7. PAT Perfect Sequence (25)

    题目描写叙述 Given a sequence of positive integers and another positive integer p. The sequence is said to ...

  8. solaris x86安装ORACLE 11.2.0.3软件时因SWAP不足报错: INFO: ld: fatal: mmap anon failed

    1.ORACLE软件安装到86%时报错,图忘截了.日志例如以下: /oracle/u01/app/oracle/product/11.2.0/ INFO: db_1/lib/sysliblist` - ...

  9. PowerDesigner里面将表中name列值拷贝到comment列

    完整版见https://jadyer.github.io/2015/06/03/powerdesigner-copy-name-to-comment/ /** * PowerDesigner里面将表中 ...

  10. [Linux]非常方便的上传下载文件工具rz和sz

     linux上非常方便的上传下载文件工具rz和sz (本文适合linux入门的朋友) [一般用于SecureCRT ssh中使用] █ 法一:直接用yum安装lrzsz(推荐) yum insta ...