第一个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. Java常量池详细说明

    java常量池技术  java中的常量池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复创建相等变量时节省了很多时间.常量池 ...

  2. 58.fetch phbase

    1.fetch phbase工作流程 The coordinating node identifies which documents need to be fetched and issues a ...

  3. python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器

    相信你已经摸清了 浏览器各种请求的套路 也知道了怎么在手机上进行请求和返回数据的抓取 那么接下来我们就开始来使用 python 了 代码 lu 起来 那么 怎么用 python 写各种请求呢? 今天要 ...

  4. FusionCharts,双折线图和双柱状图

    一个电商项目中,用到了"双柱状图",对比 当前库存和累计库存. 网上找了好几个贴子,才找到具体用法. 代码整理下,以备不时之需. 效果图-双折线图 效果图-双柱状图 <%@ ...

  5. ubuntu-kill命令-杀死进程

    显示进程pid ps -A 杀进程的命令 kill -s 9 xxx(进程pid)

  6. [bzoj1552\bzoj2506][Cqoi2014]robotic sort 排序机械臂_非旋转Treap

    robotic sort 排序机械臂 bzoj-1552 bzoj-2506 Cqoi-2014 题目大意:给定一个序列,让你从1到n,每次将[1,p[i]]这段区间反转,p[i]表示整个物品权值第i ...

  7. _DataStructure_C_Impl:求图G中从顶点u到顶点v的一条简单路径

    #pragma once #include<stdio.h> #include<stdlib.h> #define StackSize 100 typedef int Data ...

  8. Cloud Foundry中DEA与warden通信完毕应用port监听

    在Cloud Foundry v2版本号中,DEA为一个用户应用执行的控制模块,而应用的真正执行都是依附于warden. 更详细的来说,是DEA接收到Cloud Controller的请求:DEA发送 ...

  9. 编程基础知识——C++能不能支持Java和ObjC的反射?

    C++能不能支持Java和ObjC的反射? 要回答这个问题.首先我们要清楚什么是反射.什么是反射? 教科书的解释我就不说了,(^o^)事实上我也记不得.实际开发应用的反射就是在没有某个类型的头文件或者 ...

  10. UVA11234 Expressions

    题目的意思实在是读不懂,又是把栈变成队列什么的.. 只是大体的意思就是把后缀表达式变一下.. 抛开意思,事实上就是依据输入建个树,然后倒序输出.. 拿第一个例子说明:大写代表操作符(+ - × /之类 ...