超简单tensorflow入门优化程序&&tensorboard可视化
程序1
任务描述: x = 3.0, y = 100.0, 运算公式 x×W+b = y,求 W和b的最优解。
使用tensorflow编程实现:
#-*- coding: utf-8 -*-)
import tensorflow as tf
# 声明占位变量x、y
x = tf.placeholder("float",shape=[None,1])
y = tf.placeholder("float",[None,1])
# 声明变量
W = tf.Variable(tf.zeros([1,1]))
b = tf.Variable(tf.zeros([1]))
# 操作
result = tf.matmul(x,W) +b
# 损失函数
lost = tf.reduce_sum(tf.pow((result-y),2))
# 优化
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(lost)
with tf.Session() as sess:
# 初始化变量
sess.run(tf.global_variables_initializer())
# 这里x、y给固定的值
x_s = [[3.0]]
y_s = [[100.0]]
step =0
while(True):
step += 1
feed = {x: x_s, y: y_s}
# 通过sess.run执行优化
sess.run(train_step, feed_dict=feed)
if step % 50 ==0:
print 'step: {0}, loss: {1}'.format(step,sess.run(lost,feed_dict=feed))
if sess.run(lost,feed_dict=feed) < 0.00001 or step >3000:
print ''
print 'final loss is: {}'.format(sess.run(lost,feed_dict=feed))
print 'final result of {0} = {1}'.format('x×W+b',3.0*sess.run(W)+sess.run(b))
print("W : %f" % sess.run(W))
print("b : %f" % sess.run(b))
break
输出:
step: 50, loss: 1326.19543457
step: 100, loss: 175.879058838
step: 150, loss: 23.325012207
step: 200, loss: 3.09336590767
step: 250, loss: 0.410243988037
step: 300, loss: 0.0544071868062
step: 350, loss: 0.00721317622811
step: 400, loss: 0.000956638017669
step: 450, loss: 0.000126981700305
step: 500, loss: 1.68478582054e-05
step: 550, loss: 2.23610550165e-06
final loss is: 2.23610550165e-06
final result of x×W+b = [[ 99.99850464]]
W : 29.999552
b : 9.999846
任务很简单,初始学习率设置为0.0001,550论迭代后优化完成,如果初始学习率设置的高一点,如0.005,会加快收敛。求得 W = 29.999552, b = 9.999846
x×W+b = 3.0×29.999552+9.999846 = 99.999846 ,约等于目标 100.0 了。
程序2
任务描述: x、y是二维矩阵, x = [[1.0, 3.0], [3.2, 4.]], y = [[6.0, 3.0], [5.2, 43.]], 运算公式 x×W+b = y,求 W和b的最优值。
# -*- coding: utf-8 -*-)
import tensorflow as tf
# 声明占位变量x、y, 形状为[2,2]
x = tf.placeholder("float",shape=[2,2])
y = tf.placeholder("float",[2,2])
# 声明变量
W = tf.Variable(tf.zeros([2,2]))
b = tf.Variable(tf.zeros([1]))
# 操作
result = tf.matmul(x,W) +b
# 损失函数
lost = tf.reduce_sum(tf.pow((y-result),2))
# 优化
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(lost)
with tf.Session() as sess:
# 初始化变量
sess.run(tf.global_variables_initializer())
# 这里x、y给固定的值
x_s = [[1.0, 3.0], [3.2, 4.]]
y_s = [[6.0, 3.0], [5.2, 43.]]
step = 0
while(True):
step += 1
feed = {x: x_s, y: y_s}
# 通过sess.run执行优化
sess.run(train_step, feed_dict=feed)
if step % 500 == 0:
print 'step: {0}, loss: {1}'.format(step, sess.run(lost, feed_dict=feed))
if sess.run(lost, feed_dict=feed) < 0.00001 or step > 10000:
print ''
print 'final loss is: {}'.format(sess.run(lost, feed_dict=feed))
print("W : {}".format(sess.run(W)))
print("b : {}".format( sess.run(b)))
result1 = tf.matmul(x_s, W) + b
print 'final result is: {}'.format(sess.run(result1))
print 'final error is: {}'.format(sess.run(result1)-y_s)
break
输出:
step: 500, loss: 59.3428421021
step: 1000, loss: 8.97444725037
step: 1500, loss: 1.40089821815
step: 2000, loss: 0.22409722209
step: 2500, loss: 0.036496296525
step: 3000, loss: 0.00602086028084
step: 3500, loss: 0.00100283313077
step: 4000, loss: 0.000168772909092
step: 4500, loss: 2.86664580926e-05
step: 5000, loss: 4.90123693453e-06
final loss is: 4.90123693453e-06
W : [[ -2.12640238 20.26368904]
[ 3.87999701 -4.58247852]]
b : [-3.51479006]
final result is: [[ 5.99879789 3.00146341]
[ 5.20070982 42.99909973]]
final error is: [[-0.00120211 0.00146341]
[ 0.00070982 -0.00090027]]
程序3 (增加可视化)
运算公式 Y = (X*w1+b1)*(w2)+b2,求 w1、b1、w2、b2的最优值。
# -*- coding: utf-8 -*-)
import tensorflow as tf
from numpy.random import RandomState
# 定义训练数据batch的大小
batch_size = 8
# 在shape上使用None表示该维度的具体数值不定
x = tf.placeholder(tf.float32, shape=(None, 2), name='x-input')
y_ = tf.placeholder(tf.float32, shape=(None, 1), name='y-input')
# 定义神经网络的参数
w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))
bias1 = tf.Variable(tf.random_normal([3], stddev=1, seed=1))
bias2 = tf.Variable(tf.random_normal([1], stddev=1, seed=1))
# 定义神经网络前向传播的过程,即操作
a = tf.nn.relu(tf.matmul(x, w1) + bias1)
y = tf.nn.relu(tf.matmul(a, w2) + bias2)
# 定义损失函数和反向传播算法
loss = tf.reduce_sum(tf.pow((y-y_),2))
train_step = tf.train.AdamOptimizer(0.001).minimize(loss) # 梯度下降优化算法
# produce the data,通过随机数生成一个模拟数据集
rdm = RandomState(seed = 1) # 设置seed = 1 ,使每次生成的随机数一样
dataset_size = 128
X = rdm.rand(dataset_size, 2)
Y = [[x1 +10*x2] for (x1, x2) in X]
# creare a session,创建一个会话来运行TensorFlow程序
with tf.Session() as sess:
# 定义命名空间,使用tensorboard进行可视化
with tf.name_scope("inputs"):
tf.summary.histogram('X', X)
with tf.name_scope("target"):
tf.summary.histogram('Target', Y)
with tf.name_scope("outputs"):
tf.summary.histogram('Y', y)
with tf.name_scope('loss'):
tf.summary.histogram('Loss', loss)
summary_op = tf.summary.merge_all()
summary_writer = tf.summary.FileWriter('./log/', tf.get_default_graph())
# 初始化变量
sess.run(tf.global_variables_initializer())
# 设定训练的轮数
STEPS = 10000
for i in range(STEPS+1):
# get batch_size samples data to train,每次选取batch_size个样本进行训练
start = (i * batch_size) % dataset_size
end = min(start + batch_size, dataset_size)
# 通过选取的样本训练神经网络并更新参数
sess.run(train_step, feed_dict={x: X[start: end], y_: Y[start: end]})
if i % 500 == 0:
# 每隔一段时间计算在所有数据上的loss并输出
total_cross_entropy,summary = sess.run([loss,summary_op], feed_dict={x: X, y_: Y})
print ("After %d training steps, loss on all data is %g" % (i, total_cross_entropy))
# 在训练结束之后,输出神经网络的参数
log_writer = tf.summary.FileWriter('./log/')
log_writer.add_summary(summary, i)
print sess.run(w1)
print sess.run(w2)
输出:
After 0 training steps, loss on all data is 2599.94
After 500 training steps, loss on all data is 873.661
After 1000 training steps, loss on all data is 667.791
After 1500 training steps, loss on all data is 483.075
After 2000 training steps, loss on all data is 300.244
After 2500 training steps, loss on all data is 159.576
After 3000 training steps, loss on all data is 74.0152
After 3500 training steps, loss on all data is 30.0223
After 4000 training steps, loss on all data is 10.8486
After 4500 training steps, loss on all data is 3.86847
After 5000 training steps, loss on all data is 1.67753
After 5500 training steps, loss on all data is 0.870904
After 6000 training steps, loss on all data is 0.473931
After 6500 training steps, loss on all data is 0.262818
After 7000 training steps, loss on all data is 0.132299
After 7500 training steps, loss on all data is 0.0585541
After 8000 training steps, loss on all data is 0.022748
After 8500 training steps, loss on all data is 0.00789603
After 9000 training steps, loss on all data is 0.00259982
After 9500 training steps, loss on all data is 0.000722203
After 10000 training steps, loss on all data is 0.000218332
[[-0.81131822 0.74178803 -0.06654923]
[-2.4427042 1.72580242 3.50584793]]
[[-0.81131822]
[ 1.53606057]
[ 2.09628034]]
tensorboard可视化
tensorboard --logdir=log
"http://dcrmg:6006",就可以看到程序中记录下的参数可视化:
X是二维数组,Target的是128个分布在1.0~10.0之间的浮点数。 预测值Y在4000轮迭代之后越来越接近真实Target值。
直方图分布:
超简单tensorflow入门优化程序&&tensorboard可视化的更多相关文章
- Tensorflow 搭建神经网络及tensorboard可视化
1. session对话控制 matrix1 = tf.constant([[3,3]]) matrix2 = tf.constant([[2],[2]]) product = tf.matmul(m ...
- SpringCloud超简单的入门(1)--一些简单的介绍
简介 简单来说,springcloud的就是由一组springboot应用(服务)组成,相互之间通过REST等方式进行通信. 两个springboot应用,其中一个作为服务提供者,一个作为服务消费者, ...
- TensorFlow基础笔记(9) Tensorboard可视化显示以及查看pb meta模型文件的方法
参考: http://blog.csdn.net/l18930738887/article/details/55000008 http://www.jianshu.com/p/19bb60b52dad ...
- springcloud超简单的入门2--Eureka服务治理
Eureka服务治理 下面请听第一个话题,母...咳咳,拿错书了. Eureka简介 eureka是什么呢? 简单来说呢,当我的微服务应用多了起来,一个一个写死再程序里是件很不优雅的事情,而且同一服务 ...
- springcloud超简单的入门3--负载均衡
上个文章的末尾说到,当有多个服务实例的时候,怎样来获取服务实例.但是,只是简单的通过get(0)来获取列表中的第一个实例来使用. 现实场景中,还需要写一个算法来实现负载均衡来决定每次使用的服务实例,而 ...
- 超简单 Promise封装小程序ajax 超好用 以及封装登录
//网络类 //封装网络请求 const ajax = (ajaxData, method) => { wx.showLoading({ title: '加载中', mask: true }); ...
- GitHub这么火,程序员你不学学吗? 超简单入门教程 【转载】
本GitHub教程旨在能够帮助大家快速入门学习使用GitHub. 本文章由做全栈攻城狮-写代码也要读书,爱全栈,更爱生活.原创.如有转载,请注明出处. GitHub是什么? GitHub首先是个分布式 ...
- 程序员,一起玩转GitHub版本控制,超简单入门教程 干货2
本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注 ...
- 学习TensorFlow,TensorBoard可视化网络结构和参数
在学习深度网络框架的过程中,我们发现一个问题,就是如何输出各层网络参数,用于更好地理解,调试和优化网络?针对这个问题,TensorFlow开发了一个特别有用的可视化工具包:TensorBoard,既可 ...
随机推荐
- 如何用好 Google 等搜索引擎
1: 双引号短语搜索2: 减号减号前面必须是空格,减号后面没有空格,紧跟着需要排除的词例如:搜索 -引擎返回的则是包含“搜索”这个词,却不包含“引擎”这个词的结果3: 星号RE,通配符4: intit ...
- 使用ajax进行汽车详情表的查询
主界面代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...
- ibatis工作原理
摘要: iBATIS 通过 SQL Map 将 Java 对象映射成 SQL 语句和将结果集再转化成 Java 对象,与其他 ORM 框架相比,既解决了 Java 对象与输入参数和结果集的映射,又能够 ...
- 如何成为专业的PHP开发者
如何才能成为一名专业的PHP开发者?资深Web开发者Bruno Skvorc在其博客上分享了一些心得. 当阅读各种和PHP相关的博客.Quora问题.Google+社区.资讯和杂志的时候,Bruno ...
- UI控件之UITextField
UITextField:文本框:用来输入一行文本,父类是UIControl UITextField *field1=[[UITextField alloc]initWithFrame:CGRectMa ...
- 活用:after 让图片垂直居中
现在莫名虽然更喜欢 background 但大多时候还是选择用 img,这其中的利弊争议不在本文中赘述. 那么在布局中常会遇到定高容器中图片居中的需求,这时就有很多方法了呀: line-height ...
- BFC与边距重叠详解
1.什么是BFC? 在解释 BFC 是什么之前,需要先介绍 Box.Formatting Context的概念. Box: CSS布局的基本单位Box 是 CSS 布局的对象和基本单位, 直观点来说, ...
- HTTP协议—常见的HTTP响应状态码解析
常见的HTTP响应状态码解析 1XX Informational(信息性状态码) 2XX Success(成功状态码) 3XX Redirection(重定向状态码) 4XX Client Error ...
- groupby和agg的使用
先来看一段代码: 分析下groupby和agg的联合使用: reset_index()表示重新设置索引 agg传进来的统计特征: 按照A这一列作聚合,C这一列作统计 注意:df = df.groupb ...
- HDFS请求接口
通过HTTP来访问HDFS有两种方法:直接访问,HDFS后台进程直接服务于来自客户端的请求:通过代理(一对多)访问,客户端通常使用DistributedFileSystemAPI访问HDFS.第一种情 ...