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

TensorFlow:一个简单的神经网络

2018-01-17 17:03 302 查看
利用TensorFLow实现第一个简单的神经网络

#encoding:utf-8
import tensorflow as tf

# NumPy生成模拟数据集
from numpy.random import RandomState

# 定义训练数据batch大小
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 ) )

# shape使用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 )

# # 非线性激活函数
# a = tf.nn.relu( tf.matmul( x, w1 ) + biases1 )
# y = tf.nn.relu( tf.matmul( x, w1 ) + biases2 )

# 定义损失函数和反向传播算法
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 )

# 随机数生成模拟数据集
rdm = RandomState(1)
dataset_size = 128
X = rdm.rand( dataset_size, 2 )

# 定义柜子来给出样本标签
Y = [ [int(x1+x2<1)] for (x1, x2) in X ]

# 创建会话
with tf.Session() as sess:

# 初始化变量
init_op = tf.initialize_all_variables()
sess.run(init_op)

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

STEPS = 5000

for i in range(STEPS):

# 每次取一定数量的样本训练
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:

# 每隔一段时间计算交叉熵并输出
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) )
print sess.run(w1)
print sess.run(w2)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: