第一个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,然后确定好一个比较好的学习率后,再给λ一个值,随后根据准确率再精细调整。
第一个TensorFlow程序的更多相关文章
- 1、第一个TensorFlow程序
import tensorflow as tf import os os.environ[' #去掉警告,将警告级别提升 a = tf.constant(2) #定义一个常量 b = tf.const ...
- hello tensorflow,我的第一个tensorflow程序
上代码: import tensorflow as tf if __name__=='__main__': g = tf.Graph() # add ops to the user created g ...
- DirectX游戏编程(一):创建一个Direct3D程序
一.环境 Visual Studio 2012,DirectX SDK (June 2010) 二.准备 1.环境变量(如没有配置请添加) 变量名:DXSDK_DIR 变量值:D:\Software\ ...
- 第一个python程序
一个python程序的两种执行方式: 1.第一种方式是通过python解释器: cmd->python->进入python解释器->编写python代码->回车. 2.第二种方 ...
- 编写第一个MapReduce程序—— 统计气温
摘要:hadoop安装完成后,像学习其他语言一样,要开始写一个“hello world!” ,看了一些学习资料,模仿写了个程序.对于一个C#程序员来说,写个java程序,并调用hadoop的包,并跑在 ...
- 1.3 第一个C#程序
几乎没一门编程语言的第一个程序都叫“你好,世界”,所以先在visual studio 中创建一个Helloworld程序. 各部分的详细内容: Main方法是程序运行的起点,最重要的代码就写在Main ...
- 一个.net程序员的安卓之旅-Eclipse设置代码智能提示功能
一个.net程序员的安卓之旅-代码智能提示功能 过完年回来就决心开始学安卓开发,就网上买了个内存条加在笔记本上(因为笔记本原来2G内存太卡了,装了vs2010.SQL Server 2008.orac ...
- MFC-01-Chapter01:Hello,MFC---1.3 第一个MFC程序(02)
1.3.1 应用程序对象 MFC应用程序的核心就是基于CWinApp类的应用程序对象,CWinApp提供了消息循环来检索消息并将消息调度给应用程序的窗口.当包含头文件<afxwin.h>, ...
- Go! new Hello World, 我的第一个Go程序
以下语句摘自百度百科: Go语言是谷歌2009发布的第二款开源编程语言. Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全.支持并行进 ...
随机推荐
- [luogu1073 Noip2009] 最优贸易 (dp || SPFA+分层图)
传送门 Description C 国有n 个大城市和m 条道路,每条道路连接这n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这m 条道路中有一部分为单向通行的道路,一部分 为 ...
- linux下关闭键盘的重复击键
https://askubuntu.com/questions/576421/disable-keyboard-repeat-from-command-line You can use the xse ...
- shell脚本编程及bash特性
bash特性及bash脚本编程初步 终端,附着在终端的接口程序; GUI: KDE,GNome,Xfce CLI: /etc/shells bash的特性: 命令行展开: ~,{} 命令别名: ali ...
- Problem 17
Problem 17 If the numbers 1 to 5 are written out in words: one, two, three, four, five, then there a ...
- win7 VMware下安装centos和Ubuntu共存
最近在空闲时间学习Linux环境中各种服务的安装与配置,都属于入门级别的,这里把所有的学习过程记录下来,和大家一起分享. 我的电脑系统是win7,所以我需要在win7上安装一个虚拟机-VMware ...
- Navicat Premium 下载地址
Navicat Premium(32 bit)简体中文版:http://xiazai.formysql.com/trial/navicat_premium_trial.exe Navicat Prem ...
- java陷阱之Array.asList
List<Integer> numbers= Arrays.asList(new Integer[] {1,2,3}); numbers.add(3); 运行这段代码会抛出 java.la ...
- ubuntu--Supervisor的简单使用
安装,这个程序使用python写的 sudo apt-get install supervisor 配置一个你需要的配置文件 //进入 /etc/supervisor/conf.d文件目录,配置一个r ...
- POJ 2373
原本一道挺简单的DP题,思路有了,运用单调队列,但在写单调队列时写挫了... 这道题只需要计算偶数位置的即可,这是显而易见的,我有注意过这情况,写的时候却没在意...--! 加入队列的元素应该当前no ...
- day63-webservice 06.在web项目中发布以类的形式发布webservice
真正用的时候都是需要部署在WEB服务器里面. 不能写主函数来发布了,需要借助于我们WEB. 4.配置web.xml, <!DOCTYPE web-app PUBLIC "-//Sun ...