您的位置:首页 > 理论基础 > 计算机网络

神经网络学习入门(一) 模拟数据二分类

2018-01-04 15:25 239 查看

神经网络学习入门干货(一) 模拟数据二分类

基于Python3和Tensorflow的代码实现:

导入TensorFlow库和常用Python库

定义训练数据batch大小

定义神经网络权重参数

定义输入向量

定义神经网络前向传播过程

定义损失函数和反向传播优化算法

生成模拟数据集

创建执行会话

训练轮数和样本设置

训练并更新参数

交叉熵输出

实现代码

# 导入TensorFlow库和Numpy库里的random函数
import tensorflow as tf
from numpy.random import RandomState

# 定义训练数据的批次大小
batch_size = 8

# 定义神经网络参数
w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))

# 定义深度学习网络的输入向量.维度为None可以方便使用不同batch进行训练
x = tf.placeholder(tf.float32, shape=(None, 2), name='x-input')
y_ = tf.placeholder(tf.float32, shape=(None, 1), name='y-input')

#神经网络前向传播计算
a = tf.matmul(x, w1)
y = tf.matmul(a, w2)

#定义损失函数和反向传播优化算法.定义交叉熵,优化算法,学习率,最小化。
cross_entropy = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0)))
train_step = tf.train.AdamOptimizer(0.001).minimize(cross_entropy)

# 通过随机函数生成模拟数据集,输入X为128行2维的随机数据集,服从正态分布。样本标签Y为1或0,根据特征之和是否大于1来判定。
rdm = RandomState(1)
dataset_size = 128
X = rdm.rand(dataset_size, 2)
Y = [[int (x1+x2 < 1)] for (x1, x2) in X]

#创建一个会话来运行Tensorflow程序
with tf.Session() as sess:
init_op = tf.global_variables_initializer()
sess.run(init_op)
print (sess.run(w1))
print (sess.run(w2))

# 训练之前神经网络参数的值
w1 = [[-0.81131822  1.48459876  0.06532937]
[-2.44270396  0.0992484   0.59122431]]
w2 = [[-0.81131822] [ 1.48459876] [ 0.06532937]]

# 设定训练轮数
STEPS = 5000
for i in range(STEPS):

# 每次选取batch_size个样本进行训练
start = (i * batch_size) % dataset_size
end = min(start+batch_size, dataset_size)

# 通过选取的样本训练神经网络并更新参数
sess.run(train_step, feed_dict={x: X[start:end], y_:Y[start:end]})
if i % 1000 == 0:

#每隔一段时间计算在所有数据上的交叉熵并输出损失函数值。%d输出为整数,%g输出为实数。
total_cross_entropy = sess.run(cross_entropy, feed_dict={x: X, y_:Y})
print("After %d training step(s), cross entropy on all data is %g" %(i, total_cross_entropy))

#输出的交叉熵值
After 0 training step(s), cross entropy on all data is 0.0674925
After 1000 training step(s), cross entropy on all data is 0.0163385
After 2000 training step(s), cross entropy on all data is 0.00907547
After 3000 training step(s), cross entropy on all data is 0.00714436
After 4000 training step(s), cross entropy on all data is 0.00578471

print (sess.run(w1))
print (sess.run(w2))

#5000轮训练之后神经网络的参数值
w1 = [[-1.9618274   2.58235407  1.68203783]
[-3.4681716   1.06982327  2.11788988]]
w2 = [[-1.8247149 ]
[ 2.68546653]
[ 1.41819501]]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 神经网络 数据
相关文章推荐