超简单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,既可 ...
随机推荐
- Yii2.0数据库查询实例(三)
常用查询: // WHERE admin_id >= 10 LIMIT 0,10 User::find()->])->offset()->limit()->all() / ...
- ThinkPHP框架基础知识一
ThinkPHP是一个快速.兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来 ...
- Linux基本命令 文件搜索命令
1.文件搜索命令find ================================================================================== 命令名称 ...
- linux之下载工具wget
常用格式:wget options URL -b, --background 启动后转入后台执行 -c, --continue 接着下载没下载完的文件 - ...
- win10系统下载地址
Win10正式版微软官方原版ISO系统镜像下载: Win10正式版32位简体中文版(含家庭版.专业版) 文件名: cn_windows_10_multiple_editions_x86_dvd_684 ...
- Yii框架和Vue的完美结合完成前后端分离项目
背景说明 本文假设你对Yii和Vue都比较熟悉,至少都在项目里用过,另外笔者新人,以后不定时放一些干货,欢迎程序媛关注 Yii是一个PHP全端框架,典型的mvc的项目结构,后端接口都是一个控制器里放了 ...
- Linux自定义别名alias重启失效问题
Linux上的别名功能非常方便,例如ll可以显示文件列表的长信息,但是却不是以human能读懂的方式显示,所以我尝试直接在命令行中自定义一个别名: alisa lk='ls -lh' 然后lk就能正常 ...
- 深入Spring:自定义注解加载和使用
前言 在工作中经常使用Spring的相关框架,免不了去看一下Spring的实现方法,了解一下Spring内部的处理逻辑.特别是开发Web应用时,我们会频繁的定义@Controller,@Service ...
- 为什么可以Ping通IP地址,但Ping不通域名?
能否ping通IP地址,与能否解析域名是两回事不能ping通IP地址,说明对方禁止ICMP报文或对方没有开机等解析域名只是将域名翻译成IP地址,不论该IP地址是否能够正常访问 问题是ping域名的时候 ...
- 搭建TXManager分布式事务协调者
事务分组id 缓存到redis 需要配置连接到自己的 redis地址 启动后: