前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TensorFlow-GPU线性回归可视化代码,以及问题总结

TensorFlow-GPU线性回归可视化代码,以及问题总结

作者头像
andrew_a
发布2019-07-30 15:07:32
7390
发布2019-07-30 15:07:32
举报
文章被收录于专栏:Python爬虫与数据分析

通过TensorBoard将TensorFlow模型的训练过程进行可视化的展示出来,将训练的损失值随迭代次数的变化情况,以及神经网络的内部结构展示出来,以此更好的了解神经网络。

一、 建立图

通过添加一个标量数据和一个直方图数据到log文件里,然后通过TensorBoard显示出来,第一步加到summary,第二步写入文件。

将模型的生成值加入到直方图数据中(直方图名字为z),将损失函数加入到标量数据中(标量名字叫做loss_function)。

下面的代码就是在启动session之后创建一个summary_writer,在迭代中将summary的值运行出来,并且保存在文件里面

代码如下:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# !/usr/bin/env python
# @Time    : 2019/5/16 9:47
# @Author  : xhh
# @Desc    :  线性回归的TensorBoard
# @File    : tensor_tensorBoard.py
# @Software: PyCharm

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

plotdata = {"batchsize":[], "loss":[]}

def moving_average(a, w=10):
    if len(a)<w:
        return a[:]
    return [val if idx < w else sum(a[(idx-w):idx])/w for idx, val in enumerate(a)]

#  模拟数据
train_X = np.linspace(-1, 1, 100)
train_Y = 2*train_X + np.random.randn(*train_X.shape)*0.3  # 加入了噪声

# 图形展示
plt.plot(train_X,train_Y,'ro',label="original data") # label数据标签
plt.legend()
plt.show()

tf.reset_default_graph()  # 重置会话

# 创建模型
# 占位符
X = tf.placeholder("float")
Y = tf.placeholder("float")
# 模型参数
W = tf.Variable(tf.random_normal([1]), name="weight")
b = tf.Variable(tf.zeros([1]), name="bias")

# 前向结构
z = tf.multiply(X, W) +b
tf.summary.histogram('z',z)  #将预测值以直方图显示

# 反向优化
cost = tf.reduce_mean(tf.square(Y-z))
tf.summary.scalar('loss_function', cost)  #将损失以标量显示
learning_rate = 0.01
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)

# 初始化变量
init = tf.global_variables_initializer()
# 参数设置
training_epochs = 20
display_step = 2
saver = tf.train.Saver() # 模型生成,并保存
savedir = "log/"

# 启动session
with tf.Session() as sess:
    sess.run(init)


    merged_summary_op = tf.summary.merge_all()  # 合并所以summary
    # 创建summary_writer,用于写文件
    summary_writer = tf.summary.FileWriter('log/mnist_with_summaries', sess.graph)

    for epoch in range(training_epochs):
        for (x, y) in zip(train_X,train_Y):
            sess.run(optimizer, feed_dict={X:x, Y:y})

            # 生成summary
            summary_str = sess.run(merged_summary_op, feed_dict={X:x, Y:y})
            summary_writer.add_summary(summary_str, epoch) # 将summary写入文件

        # 显示训练中的详细信息
        if epoch % display_step == 0:
            loss = sess.run(cost, feed_dict={X:train_X, Y:train_Y})
            print("Epoch:",epoch+1,"cost=", loss,"W=",sess.run(W),"b=",sess.run(b))
            if not (loss=="NA"):
                plotdata["batchsize"].append(epoch)
                plotdata["loss"].append(loss)

        print("finished!")
        saver.save(sess, savedir+"linermodel.cpkt")
        print("cost=",sess.run(cost, feed_dict={X:train_X, Y:train_Y}),"W=", sess.run(W),"b=",sess.run(b))

        # 图形显示
        plt.plot(train_X, train_Y, 'ro', label='Original data')
        plt.plot(train_X, sess.run(W) * train_X + sess.run(b), label='Fitted line')
        plt.legend()
        plt.show()

        plotdata["avgloss"] = moving_average(plotdata["loss"])
        plt.figure(1)
        plt.subplot(211)
        plt.plot(plotdata["batchsize"], plotdata["avgloss"], 'b--')
        plt.xlabel('Minibatch number')
        plt.ylabel('Loss')
        plt.title('Minibatch run vs. Training loss')
        plt.show()

        print("x=0.2, z=",sess.run(z, feed_dict={X: 0.2}))

最终的运行结果,下面贴出在建模过程中拟合线性模型的变化,以及它的损失值的变化:

下图三个折线图就是在拟合模型时损失函数的变化,分别是在第2,8,19次的变化。散点图就是最终拟合出来的模型。

下图就是在运行之后多出的可视化文件:

进入该文件夹,输入cmd,激活你带有TensorFlow-gpu版本的python环境

然后输入:

地址需要变化一下,后面的端口改成8080,我的默认的6006访问不了。

代码语言:javascript
复制
tensorboard --logdir F:\code\tensor_test\log\mnist_with_summaries --port=8080

最终运行后的结果如下:

然后打开谷歌浏览器(最好是谷歌),输入http://localhost:8080访问就可以看到了:

损失值随迭代次数的变化情况:

神经网络内部结构:

单击SCALARS,会看到之前创建的loss_function,点开后可以看到损失值随迭代次数的变化情况。如上图。

二、可能会出现的问题

(1) 在cmd时可能会出现这样的问题:

上面的是因为没有对应的TensorFlow-gpu的python所以访问不了。

(2)TensorFlow-GPU,python环境的问题

我的是下图的Python==3.6.2, tensorflow-gpu==1.13.1

python环境和tensorflow-gpu版本不兼容,所以出现下面的问题,最好将python环境换成了python=3.6.7,并且安装TensorFlow-gpu=1.13.1,之后运行成功了

(3)访问问题

在用127.0.0.1:6006,访问时出现拒绝访问,如下:

是因为本机的默认ip地址为localhost所以访问不了,换成localhost可以访问。

在或着可能出现6006端口访问不了,这时就需要在后面给上指定IP=8080,然后访问就OK了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python爬虫scrapy 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、 建立图
  • 二、可能会出现的问题
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档