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

TensorFlow实现简单的全连接网络(十三)

2018-02-25 21:54 239 查看
TensorFlow实现简单的全连接网络
首先这里要实现的是一个两层的神经网络,输入层,然后两层的隐层,最后输出层。
使用的数据还是mnsit的手写数据集。
import tensorflow as tf
import tensorflow.examples.tutorials.mnist.input_data as input_data
import matplotlib.pyplot as plt
mnist = input_data.read_data_sets('data/' , one_hot=True)准备权值的格式和偏置值的格式:
n_hidden_1 = 256
n_hidden_2 = 128
n_input = 784
n_classes = 10

x = tf.placeholder("float", [None, n_input])
y = tf.placeholder("float", [None, n_classes])
stddev = 0.1weights = { 'w1' : tf.Variable(tf.random_normal([n_input , n_hidden_1],stddev = stddev)), 'w2' : tf.Variable(tf.random_normal([n_hidden_1 , n_hidden_2],stddev = stddev)), 'out': tf.Variable(tf.random_normal([n_hidden_2 , n_classes] , stddev = stddev))}biases = { 'b1' : tf.Variable(tf.random_normal([n_hidden_1])), 'b2' : tf.Variable(tf.random_normal([n_hidden_2])), 'out': tf.Variable(tf.random_normal([n_classes]))}中间层设置256和128个神经元。x,y的值同样可以使用占位,也就是placeholder。

然后就是前向传播:
def multilayer(x , weights , biases):
layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x , weights['w1']) , biases['b1']))
layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1 , weights['w2'] , biases['b2'])))
return tf.add(tf.matmul(layer_2 , weights['out']) , biases['out'])
pass加减这些要使用TensorFlow的方法。
pred = multilayer(x , weights , biases)
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred , labels=y))
optim = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(cost)
corr = tf.equal(tf.argmax(pred ,axis = 1) , tf.argmax(y , axis = 1))
acc = tf.reduce_mean(tf.cast(corr , tf.float32))
init = tf.global_variables_initializer()

bacth_size = 100
costs = []
sess = tf.Session()
sess.run(init)
for n in range(1000):
cost = 0
n_bacth = int(mnist.train.num_examples / bacth_size)
for i in n_bacth:
train_x , train_y = mnist.train.next_batch(bacth_size)
feeds = {x : train_x , y : train_y}
sess.run(optim , feed_dict = feeds)
cost += sess.run(cost , feed_dict = feeds)
cost /= n_bacth
if n % 10 == 0:
costs.append(cost)

test_x , test_y = mnist.test.next_batch(1000)
test_feeds = {x : test_x , y : test_y}
sess.run(acc , feed_dict = test_feeds)
plt.plot(range(len(costs)) , costs)
plt.show()接着就是进行计算,不同以往的就是损失函数使用了一个交叉熵函数来计算损失值,之前都是使用的均方差。其他的都是和上一篇差不多。
可以得到输出的loss函数:



计算测试数据的精确值可以得到:



最后迭代1000次得到的损失值最低是0.2821。测试数据准确率是95%
可以得到loss的曲线:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: