# _*:utf-8_*_
作为 tf
# Numpy 是一个科学计算的工具包,这里通过 Numpy 工具包生成一个模拟数据集
来自 numpy。
#定义训练数据batch的大小
=8
#定义神经网络的参数
w1 = tf.(tf.([2, 3], =1, seed=1))
w2 = tf.(tf.([3, 1], =1, seed=1))
#在一维形状上使用None可以方便地表示使用小批量,
#训练时需要将数据分成更小的batch,测试时可以一次性使用所有数据
#但是,如果数据集比较大,将大量数据放入一个batch可能会导致内存溢出。
x = tf.(tf., shape=(None, 2), name=’x-input’)
y_ = tf.(tf., shape=(None, 1), name=’y-input’)
#定义神经网络前向传播的过程
a = tf.(x, w1)
y = tf.(a, w2)
#定义一个损失函数来表征预测值与真实值的差异
= -tf.(
y_ * tf.log(tf.(y, 1e-10, 1.0))
)
#定义学习率
= 0.001
# 定义反向传播算法以优化神经网络中的采用次数
= tf.train.().()
#从随机数生成模拟数据集
rdm = (1)
= 128
X = rdm.rand(, 2)
#定义规则给样本打标签,这里都是x1+x2
#等都是负样本(比如不合格的部分),在中的表示方式不一样
# 这里我们用0代表负样本,1代表正样本。大多数解决分类问题的神经网络都会使用 0 和 1 表示方法
Y = [[int(x1 + x2 < 1)] for (x1, x2) in X]
# 创建一个会话来运行
使用 tf.() 作为 sess:
= tf.()
#初始化变量
sess.run()
打印(sess.run(w1))
打印(sess.run(w2))
”’
训练前神经网络参数的值
w1 = [[-0. 1. 0.]
[-2. 0. 0. ]]
w2 = [[-0. ]
[ 1. ]
[0.]]
”’
#设置训练轮数
步数 = 5000
对于范围内的 i(步骤):
# 一次选择样本进行训练
开始 = (i * ) %
end = min(start + , )
# 用选定的样本训练神经网络并更新参数
sess.run(,
={x: X[start:end], y_: Y[start: end]})
如果我 % 1000 == 0:
# 每隔一段时间计算所有数据的交叉熵并输出
= sess.run(,
={x: X, y_: Y})
print(“经过 %d 步后,所有数据为 %g” % (i, ))
”’
输出结果:
0 步后,所有数据为 0.
1000 步后,所有数据为 0.
在 2000 步之后,所有数据都是 0.
3000 步后,所有数据为 0.
在 4000 步之后,所有数据都是 0.
通过这个结果可以发现,随着训练的进行,交叉熵逐渐减小
交叉熵越小,预测结果与真实结果的差距越小
”’
打印(sess.run(w1))
打印(sess.run(w2))
”’
训练后的神经网络参数值
w1 = [[-1. 2. 1.]
[-3. 1. 2.11789 ]]
w2 = [[-1. ]
[2.]
[ 1. ]]
对比神经网络参数从一开始到开始的值,我们发现这两个参数的值发生了变化
这种变化是训练的结果,它可以让神经网络更好地拟合提供的训练数据集
”’
暂无评论内容