import tensorflow._api.v2.compat.v1 as tf import numpy as np tf.disable_v2_behavior()
def add_layer(input, insize, outsize, n_layer, active_function=None):
layer_name = 'layer%s' % n_layer
with tf.name_scope(layer_name): # 定义层的大框架,用做神经网络的结构图
with tf.name_scope('Weights'): # 定义大框架之中的小内容
Wights = tf.Variable(tf.random_normal([insize, outsize]))
tf.summary.histogram(layer_name + '/weights', Wights)#要进行可视化的参数
with tf.name_scope('biases'):
bias = tf.Variable(tf.zeros([1, outsize]) + 0.1)
tf.summary.histogram(layer_name + '/biases', bias)
with tf.name_scope('Wx_plus_bias'):
Wx_plus_bias = tf.matmul(input, Wights) + bias
if active_function is None:
output = Wx_plus_bias
else:
output = active_function(Wx_plus_bias)
tf.summary.histogram(layer_name + '/output', output)
return output
# 要进行拟合的数据
x_data = np.linspace(-1, 1, 300)[:, np.newaxis].astype('float32')
# 在-1和1之间随机生成300个数,定义类型为float32,newaxis表示维度
noise = np.random.normal(0, 0.05, x_data.shape)
y_data = np.square(x_data) - 0.5 + noise
# 对输入的数据进行占位符
with tf.name_scope('inputs'): # 为生成神经网络的结构图,将两个输入放入 ’inputs‘的框架之中
x = tf.placeholder(tf.float32, [None, 1], name='x_input')
y = tf.placeholder(tf.float32, [None, 1], name='y_input')
l1 = add_layer(x, 1, 10, n_layer=1, active_function=tf.nn.relu)
prediction = add_layer(l1, 10, 1, n_layer=2, active_function=None)
# 定义损失
with tf.name_scope('loss'):
loss = tf.reduce_mean(tf.reduce_sum(tf.square(y - prediction, name='reduce_sum'), reduction_indices=[1], name='reduce_sum'),
name='reduce_mean')
tf.summary.scalar('loss', loss)
with tf.name_scope('train_step'):
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
sess = tf.Session()
merged = tf.summary.merge_all()
# 合并前面的各项参数图
writer = tf.summary.FileWriter('E:\python_file\logs', sess.graph)
# 将可视化的图表文件保存到指定文件夹
init = tf.global_variables_initializer()
#初始化所有变量
sess.run(init)
for i in range(1000):
sess.run(train_step, feed_dict={x: x_data, y: y_data})
#进行训练
if i % 50 == 0: # print(sess.run(loss,feed_dict={x:x_data,y:y_data}))
result = sess.run(merged, feed_dict={x: x_data, y: y_data})
writer.add_summary(result, i) #每间隔50步记录一个点
先运行代码,最后打开terminal终端
运行tensorboard --logdir =logs

如果类似loss曲线图中的曲线太多,是保存的logs文件夹中文件太多。可以删除多余的文件
本文介绍如何使用TensorFlow 2.x创建一个简单的神经网络模型,包括定义层、添加激活函数、损失函数和优化器,以及使用histogram可视化训练过程。通过实例展示了如何处理数据、设置占位符和训练,并使用TensorBoard监控模型性能。
2189

被折叠的 条评论
为什么被折叠?



