程序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    (增加可视化)


任务描述:  X是128个二维数组[X1, X2], Y是X中X1和X2 相关的函数,Y = x1 +10*x2,
运算公式  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可视化

程序3运行之后在程序所在目录下生成 log 文件夹,保存了运行过程中的中间参数;
在log文件夹同级目录下,执行tensorboard指令:

tensorboard --logdir=log


当前系统的浏览器里输入TensorBoard返回的ip地址,这里是
"http://dcrmg:6006",就可以看到程序中记录下的参数可视化:

X是二维数组,Target的是128个分布在1.0~10.0之间的浮点数。 预测值Y在4000轮迭代之后越来越接近真实Target值。

直方图分布:

超简单tensorflow入门优化程序&&tensorboard可视化的更多相关文章

  1. Tensorflow 搭建神经网络及tensorboard可视化

    1. session对话控制 matrix1 = tf.constant([[3,3]]) matrix2 = tf.constant([[2],[2]]) product = tf.matmul(m ...

  2. SpringCloud超简单的入门(1)--一些简单的介绍

    简介 简单来说,springcloud的就是由一组springboot应用(服务)组成,相互之间通过REST等方式进行通信. 两个springboot应用,其中一个作为服务提供者,一个作为服务消费者, ...

  3. TensorFlow基础笔记(9) Tensorboard可视化显示以及查看pb meta模型文件的方法

    参考: http://blog.csdn.net/l18930738887/article/details/55000008 http://www.jianshu.com/p/19bb60b52dad ...

  4. springcloud超简单的入门2--Eureka服务治理

    Eureka服务治理 下面请听第一个话题,母...咳咳,拿错书了. Eureka简介 eureka是什么呢? 简单来说呢,当我的微服务应用多了起来,一个一个写死再程序里是件很不优雅的事情,而且同一服务 ...

  5. springcloud超简单的入门3--负载均衡

    上个文章的末尾说到,当有多个服务实例的时候,怎样来获取服务实例.但是,只是简单的通过get(0)来获取列表中的第一个实例来使用. 现实场景中,还需要写一个算法来实现负载均衡来决定每次使用的服务实例,而 ...

  6. 超简单 Promise封装小程序ajax 超好用 以及封装登录

    //网络类 //封装网络请求 const ajax = (ajaxData, method) => { wx.showLoading({ title: '加载中', mask: true }); ...

  7. GitHub这么火,程序员你不学学吗? 超简单入门教程 【转载】

    本GitHub教程旨在能够帮助大家快速入门学习使用GitHub. 本文章由做全栈攻城狮-写代码也要读书,爱全栈,更爱生活.原创.如有转载,请注明出处. GitHub是什么? GitHub首先是个分布式 ...

  8. 程序员,一起玩转GitHub版本控制,超简单入门教程 干货2

    本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注 ...

  9. 学习TensorFlow,TensorBoard可视化网络结构和参数

    在学习深度网络框架的过程中,我们发现一个问题,就是如何输出各层网络参数,用于更好地理解,调试和优化网络?针对这个问题,TensorFlow开发了一个特别有用的可视化工具包:TensorBoard,既可 ...

随机推荐

  1. C#类和结构(1)

    1.结构功能特性? 实现代码? 结构用struct关键字定义的,与类类似,但有本质区别.结构实质是一个值类型,它不需要对分配的. 结构的特性: (1).结构作为参数传递时,是值传递. (2).结构的构 ...

  2. Nexus Repository Manager 使用笔记

    在使用maven是,因内外网限制往往需要配置自由的maven库,小编看见网上教程数不胜数,遍主动试试 以下是下载地址 : http://www.sonatype.com/download-oss-so ...

  3. iOS WKWebView OC 与 JS 交互学习

    我写WKWebView 想让 服务端相应 一个 方法但是不响应,根据 UIWebView 用 JSContext就能拿到响应的处理经验是不是服务端 也需要 对 WKwebView有兼容的一个写法??? ...

  4. $《第一行代码:Android》读书笔记——第10章 Android网络编程

    (一)WebView的用法 1.WebView也是一个普通的控件. 2.常用用法: WebView webView = (WebView)findViewById(R.id.web_view); we ...

  5. vue 数据传递的方法

    组件(Component)是 Vue.js 最强大的功能.组件可以封装可重用的代码,通过传入对象的不同,实现组件的复用,但组件传值就成为一个需要解决的问题. 1.父组件向子组件传值 组件实例的作用域是 ...

  6. [Python] 弗洛伊德(Floyd)算法求图的直径并记录路径

    相关概念 对于一个图G=(V, E),求图中两点u, v间最短路径长度,称为图的最短路径问题.最短路径中最长的称为图的直径. 其中,求图中确定的某两点的最短路径算法,称为单源最短路径算法.求图中任意两 ...

  7. Idea根据表自动生成实体

    Idea根据表自动生成实体: 首先说下这种方式有个缺点,就是如果表里面有日期.时间类型,那么需要手动的设置映射类型 第一步:在Idea中配置好数据库: 在Idea窗口右边,点击Database按钮 配 ...

  8. java string 细节原理分析(2016.5)

    看到了以前2016.5月学习java写的笔记,这里放在一起. String实现的细节原理分析 一.jdk源码中String 的实现 public final class String implemen ...

  9. java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component...

    今天开发犯了一个特lowB的错,记录下来,引以为戒! 严重: A child container failed during start java.util.concurrent.ExecutionE ...

  10. HIVE 2.1.0 安装教程。(数据源mysql)

    前期工作 安装JDK 安装Hadoop 安装MySQL 安装Hive 下载Hive安装包 可以从 Apache 其中一个镜像站点中下载最新稳定版的 Hive, apache-hive-2.1.0-bi ...