第一个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. Sperner定理及其证明

    额,最近看到了一个十分有趣的定理--Sperner定理.其实这个定理在OI中没什么用处,因此我都没把这篇文章放到我的OI标签里(不知道在MO中是否有用?)但是觉得它很有趣于是就过来写一下. 由于博主太 ...

  2. Feign 负载均衡

    一.是什么 Feign 是一个声明式 WebService 客户端.使用 Feign 能让编写 Web Service 客户端更加简单,他的使用方法是定义一个接口,然后在上面添加注解.同时也支持 JA ...

  3. mysql-windows修改root密码

    安装mysql完成后 直接进入方式 mysql -u root -p 设置mysql的root密码 mysql -u root -p password 8888

  4. SCVMM-VMWARE ACE虚拟机管理工具

    SCVMM是微软的虚拟化管理工具 VMWARE ACE是另一套虚拟化的工具 这两套工具都是用来管理虚拟机的,可以直接将物理机虚拟化为虚拟机 企业一旦发展到了一定阶段,并然需要自己的服务器和虚拟化环境, ...

  5. Linux查看文件内容命令:less(转)

    less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前不会加载整个文件. 语法 less [参数] 文件 参数说明: -b <缓冲 ...

  6. Linux文件查找命令find(转)

    Linux find命令用来在指定目录下查找文件.任何位于参数之前的字符串都将被视为欲查找的目录名.如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件.并且将查找到的子目录 ...

  7. Linux Terminal fortune

    Linux下,我们能够使用apt-get安装fortune,这是一个比較有趣的功能 在输入fortune之后,Terminal会输出一句名言.诗句,或一些有趣的话: 默认情况下.fortune仅仅会显 ...

  8. C语言开发函数库时利用不透明指针对外隐藏结构体细节

    1 模块化设计要求库接口隐藏实现细节 作为一个函数库来说,尽力降低和其调用方的耦合.是最主要的设计标准. C语言,作为经典"程序=数据结构+算法"的践行者,在实现函数库的时候,必定 ...

  9. oc16--set,get

    // // Kline.h // day13 #import <Foundation/Foundation.h> @interface Kline : NSObject { int _ma ...

  10. grpc vs2015编译

    获取gRPC源码 gRPC是开源框架,项目代码在github上,所以首先要安装github.github安装后,在指定文件夹中,执行git命令就可以获取gRPC的所有源码. git clone  ht ...