超简单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,既可 ...
随机推荐
- eval in Shell
语法:eval cmdLine eval会对后面的cmdLine进行两遍扫描,如果第一遍扫描后,cmdLine是个普通命令,则执行此命令: 如果cmdLine中含有变量的间接引用,则保证间接引用的语义 ...
- Python中使用MySQL
@1: 安装MySQL: lxw ~$ sudo apt-get install mysql-server 可以通过 sudo netstat -tap | grep mysql` 命令检查之后,如果 ...
- Manacher专题
1.POJ 3974 Palindrome 题意:求一个长字符串的最长回文子串. 思路:Manacher模板. #include<iostream> #include<algorit ...
- This version of the rendering library is more recent than your version of ADT plug-in. Please update ADT plug-in问题
点击 Help > Install New Software. 在 Work with 的输入区域里, 输入: https://dl-ssl.google.com/android/eclipse ...
- Loadrunder之脚本篇——参数化取值策略
参数取值选项 Select next row Update value on 以上两个选项是改变参数化取值的关键选项. Select next row包含如下选项: Sequential:顺序选择 R ...
- 如何计算android设备的屏幕物理尺寸
https://segmentfault.com/q/1010000002794179 通过android提供的接口,我们可以获取到如下的信息:int densityDpi = mContext.ge ...
- nodejs模块Phantom,无界面浏览器
PhantomJS 是一个无界面的 webkit 内核浏览器,
- Go panic recover
panic 1. 停止当前函数执行 2. 一直向上返回,执行每一层的defer 3. 如果没有遇到recover, 程序退出 recover 1. 仅在defer调用中使用 2. 获取panic的值 ...
- java中大数类的学习
java中提供了大数类BigInteger和BigDecimal分别表示大整数类和大浮点数类,这两个类都在java.math.*包中,因此每次必须在开头处引用该包. 一.BigInteger构造函数: ...
- MAC 系列 之XCode7.1 + HBuilder MUI 离线打包 ipa 上次application leader 问题:ERROR ITMS - 90032
90032 解决方法: