超简单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,既可 ...
随机推荐
- 42和为S的两个数字
题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. 设置 ...
- Kattis - sortofsorting 【排序】
题意 给出一系列字符串,然后要排序 排序规则 只按前两位按字典序来排序,如果前两位完全一样,则按输入的顺序来排 思路 要用 冒泡排序 不能用STL里面的 SORT 因为它不稳定 AC代码 #inclu ...
- 财经世界(2)A股B股和H股
在发行过程中,公司通过章程给不同股份形式赋予不同的权益,使公司股份出现A股.B股等形式.我国上市公司的股票有A股.B股.H股.N股.S股等的区分.这一区分的主要依据股票的上市地点和所面对的投资者而定. ...
- Word内容修改,以及转PDF
Word模板内容修改 1.java代码 package com.sicdt.sicsign.web.utils; import java.io.ByteArrayInputStream; import ...
- android 7.0 (nougat)的编译优化-ninja
http://blog.csdn.net/songjam/article/details/52640501 版权声明:本文为博主原创文章,未经博主允许不得转载. 从官方的定义,ninja大大缩短了an ...
- Django---media静态文件的配置&全局变量
media 静态文件配置 static 静态文件多用于存放用于渲染前端页面的相关数据,media用于存放客户上传或其他的文件 setting.py 中加入路径 MEDIA_ROOT = ( os.pa ...
- 2.3UML建模之用例图关系
一.UML简介 UML(统一建模语言,Unified Modeling Language)是一种定义良好.易于表达.功能强大且普遍适用的可视化建模语言.它融入了软件工程领域的新思想.新方法和新技术.它 ...
- linux下安装编译网卡驱动的方法
安装linux操作系统后发现没有网卡驱动,表现为 system → Administration → Network下Hardware列表为空. 以下为安装编译网卡驱动的过程,本人是菜鸟,以下是我从网 ...
- JAVA Excel导入导出
--------------------------------------------方式一(新)-------------------------------------------------- ...
- eclipse maven 项目 maven build 无反应
eclipse maven 项目 使用maven build ,clean 等命令均无反应,控制台无任何输出 1.打开Window --> Preferences --> Java --& ...