Código de visualização de regressão linear TensorFlow-GPU e resumo do problema

Exiba visualmente o processo de treinamento do modelo TensorFlow por meio do TensorBoard, exiba a alteração do valor da perda de treinamento com o número de iterações e a estrutura interna da rede neural, para entender melhor a rede neural.

Um, crie um mapa

   Ao adicionar dados escalares e dados de histograma ao arquivo de log e, em seguida, exibi-los por meio do TensorBoard, a primeira etapa é adicionada ao resumo e a segunda etapa é gravada no arquivo.

 O valor gerado do modelo é adicionado aos dados do histograma (o nome do histograma é z) e a função de perda é adicionada aos dados escalares (o nome escalar é loss_function).

O código a seguir é para criar um summary_writer após iniciar a sessão, executar o valor do resumo na iteração e salvá-lo no arquivo

   código mostrado abaixo:

# -*- 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}))

Para os resultados finais da execução, as mudanças no modelo linear de ajuste durante o processo de modelagem e as mudanças em sua perda são publicadas abaixo:

Os três gráficos de linha na figura abaixo são as mudanças na função de perda ao ajustar o modelo, que são as mudanças em 2, 8 e 19 vezes, respectivamente. O gráfico de dispersão é o modelo final ajustado.

 

A figura a seguir é o arquivo de visualização adicional após a execução:

Entre na pasta, digite cmd, ative seu ambiente Python com a versão TensorFlow-gpu

Em seguida, digite:

O endereço precisa ser alterado. A porta na parte traseira foi alterada para 8080, e meu padrão 6006 não pode ser acessado.

tensorboard --logdir F:\code\tensor_test\log\mnist_with_summaries --port=8080

Os resultados após a execução final são os seguintes:

Em seguida, abra o navegador Google (de preferência Google), digite http: // localhost: 8080 para visitar e você verá:

O valor da perda muda com o número de iterações:

A estrutura interna da rede neural:

Clique em ESCALARES, e você verá a função loss_ criada anteriormente.Depois de clicar nela, você poderá ver a mudança do valor da perda com o número de iterações. Como mostrado acima.

2. Problemas que podem surgir

(1) Esses problemas podem ocorrer no cmd:

O texto acima não está acessível porque não há um TensorFlow-gpu python correspondente.

(2) Problemas com TensorFlow-GPU e ambiente python

O meu é Python == 3.6.2 na figura abaixo, tensorflow-gpu == 1.13.1

O ambiente python e a versão tensorflow-gpu não são compatíveis, então os problemas a seguir ocorrem. É melhor mudar o ambiente python para python = 3.6.7 e instalar TensorFlow-gpu = 1.13.1 e, em seguida, executar com sucesso

(3) Problemas de acesso

Ao usar 127.0.0.1:6006, o acesso é negado ao acessar, da seguinte forma:

Isso ocorre porque o endereço IP padrão da máquina é localhost, portanto ela não pode ser acessada, mas pode ser acessada mudando para localhost.

Pode parecer que não é possível acessar a porta 6006. Neste momento, você precisa especificar IP = 8080 na parte traseira e, em seguida, o acesso está OK.

 

Você pode prestar atenção no relato oficial meu e meu amigo ~~~ Aqui estão algumas informações técnicas sobre python que meu amigo e eu atualizamos de vez em quando! ! Você também pode deixar uma mensagem e discutir questões técnicas. Espero que você possa apoiar e prestar atenção a isso. Obrigado ~~

 

 

 

 

 

 

       

  

Acho que você gosta

Origin blog.csdn.net/weixin_39121325/article/details/90257354
Recomendado
Clasificación