第三周

 

本节内容:

  • 非线性回归
  • 手写字体识别

 

 

 

 

 

 

 

 

 

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

#生成200个数据样本
x_data = np.linspace(-0.5,0.5,200)[:,np.newaxis]
noise = np.random.normal(0,0.02,x_data.shape)
y_data =np.square(x_data)+noise

#定义两个占位符
x = tf.placeholder(tf.float32,[None,1])
y = tf.placeholder(tf.float32,[None,1])

#定义神经网络中间层:
weights_l1 = tf.Variable(tf.random_normal([1,10]))
b_l1 = tf.Variable(tf.zeros([1,10]))
wx_plus_b_l1 =tf.matmul(x,weights_l1)+b_l1
l1 = tf.nn.tanh(wx_plus_b_l1)

#定义神经网络输出层:
weights_l2 = tf.Variable(tf.random_normal([10,1]))
b_l2 = tf.Variable(tf.zeros([1,1]))
wx_plus_b_l2 =tf.matmul(l1,weights_l2)+b_l2
prediction = tf.nn.tanh(wx_plus_b_l2)

#二次代价函数
loss = tf.reduce_mean(tf.square(y-prediction))

#使用梯度下降法训练
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    for _ in range(2000):
        sess.run(train_step,feed_dict={x:x_data,y:y_data}) 
#获得预测值
    prediction_value = sess.run(prediction,feed_dict={x:x_data})

#绘图
plt.figure()
plt.scatter(x_data,y_data)
plt.plot(x_data,prediction_value,'r-',lw=5)
plt.show()



 

 

http://yann.lecun.com/exdb/mnist/

 

 

 

 

 

 

 

 

 

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

#载入数据集
mnist = input_data.read_data_sets("MNIST_data",one_hot=True)

#每个批次的大小
batch_size = 100
#计算一共有多少个批次
n_batch = mnist.train.num_examples // batch_size

#定义两个placeholder
x = tf.placeholder(tf.float32,[None,784])
y = tf.placeholder(tf.float32,[None,10])

#创建一个简单的神经网络
W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))
prediction = tf.nn.softmax(tf.matmul(x,W)+b)

#二次代价函数
loss = tf.reduce_mean(tf.square(y-prediction))
#使用梯度下降法
train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)

#初始化变量
init = tf.global_variables_initializer()

#结果存放在一个布尔型列表中
correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1))#argmax返回一维张量中最大的值所在的位置
#求准确率
accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))

with tf.Session() as sess:
    sess.run(init)
    for epoch in range(21):
        for batch in range(n_batch):
            batch_xs,batch_ys =  mnist.train.next_batch(batch_size)
            sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys})
        
        acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels})
        print("Iter " + str(epoch) + ",Testing Accuracy " + str(acc))

 

 

 

 

自己尝试优化网络(从以下几个方面入手):

修改每个批次的大小、改变初始化权重的方式、添加神经网络层数、修改优化方式、调整学习率等等

 

posted @ 2019-02-09 18:29  大头swag  阅读(128)  评论(0)    收藏  举报