Tensorflow学习记录5 Tensorboard-graph

"""
def add_layer() 自定义层
输出结果可视化1 graph
"""
import tensorflow as tf
import numpy as np


def add_layer(inputs, in_size, out_size, activation_function=None):
    # 画出大框架(加名)
    with tf.name_scope('layer'):
        with tf.name_scope('weights'):
            # 定义权重,定义矩阵用大写开头;生成随机变量要比初始为零的变量好很多
            Weights = tf.Variable(tf.random_normal([in_size, out_size]), name='W')    # 有in_size行,out_size列的矩阵
        with tf.name_scope('biases'):
            # biases是一个类似列表的东西,所以要给它1行X列,同时biases推荐值不为0,所以给它加个初始值
            biases = tf.Variable(tf.zeros([1, out_size]) + 0.1, name='b')
        with tf.name_scope('Wx_plus_b'):
            # 输入矩阵与权重矩阵相乘,再加上biases
            Wx_plus_b = tf.matmul(inputs, Weights) + biases

        if activation_function is None:
            outputs = Wx_plus_b
        else:
            outputs = activation_function(Wx_plus_b)
        return outputs


# -1到1区间内,线性取出300个元素,加一个维度   (一个特性,300个粒子)
x_data = np.linspace(-1, 1, 300)[:, np.newaxis]

# 加噪声点,更像真实函数
noise = np.random.normal(0, 0.05, x_data.shape)

# x的二次方减0.5
y_data = np.square(x_data) - 0.5 + noise

# 定义placeholder,准备输入到神经网络
# float32是类型(dtype);None表示无论给多少个粒子都ok;1是x_data以及y_data的规格
with tf.name_scope('inputs'):
    xs = tf.placeholder(tf.float32, [None, 1], name='x_input')
    ys = tf.placeholder(tf.float32, [None, 1], name='y_input')


# 一个输入层,一个隐藏层,一个输出层
# 自定义:隐藏层给10个神经元
# 输入层是输入多少data就有多少神经元,此例中x_data是一个属性,故只有一个神经元
# 输出层同上,也只有一个神经元

# 添加隐藏层
# 提示中的in_size和out_size可以理解为隐藏层的输入和输出(x_data是一个神经元输入到隐藏层,设定隐藏层有10个神经元)
# 激励函数可以多种选择,进行测试。relu比较通用,也可以试试别的看看结果
l1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu)

# 添加输出层(通过该层得到预测值)
# 同隐藏层理,in_size为隐藏层的输出10,out_size为y_data规格1
prediction = add_layer(l1, 10, 1, activation_function=None)

# 计算预测值和真实值的差距(损失)【所有两种粒子差的平方,再求和,再求平均值】
with tf.name_scope('loss'):
    loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction), reduction_indices=[1]))

# 从误差中进行练习,逼近正确值
# 选择一个优化器,此例中选择常用的GradientDescentOptimizer,0.1是学习率,0-1间都可以尝试,测试出最佳结果
# 优化器要做的是减小误差,故最后minimize(loss)
with tf.name_scope('train'):
    train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

sess = tf.Session()
writer = tf.summary.FileWriter("logs/", sess.graph)

sess.run(tf.global_variables_initializer())

# init = tf.global_variables_initializer()
#
# sess = tf.Session()
# sess.run(init)


# # 学习一千步
# for i in range(1000):
#     # training
#     sess.run(train_step, feed_dict={xs: x_data, ys: y_data})
#     if i % 50 == 0:
#         # 每50步报告loss
#         print(sess.run(loss, feed_dict={xs: x_data, ys: y_data}))

运行后在程序目录下会出现文件:

运行方法:

运行结果:

猜你喜欢

转载自blog.csdn.net/GBA_Eagle/article/details/88418628