1、Polynomial Regression
1.准备好数据、placeholder、Variable
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
n_examples = 300
xs = np.linspace(-3, 3, n_examples)
ys = np.sin(xs) + np.random.uniform(-0.5, 0.5, n_examples)
X = tf.placeholder(tf.float32, name='X')
Y = tf.placeholder(tf.float32, name='Y')
W = tf.Variable(tf.random_normal([1]), name='W')
W_2 = tf.Variable(tf.random_normal([1], name='W_2'))
W_3 = tf.Variable(tf.random_normal([1]), name='W_3')
b = tf.Variable(tf.random_normal([1]), name='b')
2.定义预测结果、损失函数值、优化方法
y_ = tf.add(tf.multiply(X,W),b)
y_ = tf.add(y_, tf.multiply(tf.pow(X,2),W_2))
y_ = tf.add(y_, tf.multiply(tf.pow(X,3),W_3))
n_samples = xs.shape[0]
loss = tf.reduce_sum(tf.square(Y-y_))/n_samples
learning_rate = 0.03
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
3.在Session中执行Graph
with tf.Session() as sess:
writer = tf.summary.FileWriter('./graphs/polynomial_reg',sess.graph)
sess.run(tf.global_variables_initializer())
for i in range (201):
total_loss = 0
for x,y in zip(xs, ys):
_,l = sess.run([optimizer, loss],feed_dict={X:x, Y:y})
total_loss += l
if i%20 == 0:
print('Epoch{0}:{1}'.format(i,total_loss/n_samples))
writer.close()
W,W_2,W_3,b = sess.run([W,W_2,W_3,b])
4.绘图查看结果
plt.plot(xs,ys,'bo',label='Real Data')
plt.plot(xs,xs*W+np.power(xs,2)*W_2+np.power(xs,3)*W_3+b,'r-',lw=5,label='Predicted Data')
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
plt.title('Polynomial Regression')
plt.show()
5.查看Tensorboard中的Graph
打开cmd,在终端输入
$ python [yourprogram].py
$ tensorboard --logdir=./graphs/polynomial_reg
打开http://DESKTOP-8U9HK9B:6006,在GRAPHS中可以看到数据流图。
2、用Logistic Regression做MNIST手写数字识别
1.准备好数据、placeholder、Variable
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import time
mnist = input_data.read_data_sets('/data/mnist',one_hot=True)
batch_size = 128
X = tf.placeholder(tf.float32,[batch_size,784],name='X_placeholder')
Y = tf.placeholder(tf.int16,[batch_size,10],name='Y_placeholder')
W = tf.Variable(tf.random_normal(shape=[784,10],stddev=0.01),name='weight')
b = tf.Variable(tf.zeros([1,10]),name='bias')
2.定义loss、optimizer
logits = tf.add(tf.matmul(X,W),b)
entropy = tf.nn.softmax_cross_entropy_with_logits(logits = logits, labels = Y, name = 'entropy')
loss = tf.reduce_mean(entropy)
learning_rate = 0.03
optimizer = tf.train.AdamOptimizer(learning_rate).minimize(loss)
3.在Session中执行Graph
n_epochs = 30
with tf.Session() as sess:
writer = tf.summary.FileWriter('./graphs/logistic_reg2',sess.graph)
start_time = time.time()
sess.run(tf.global_variables_initializer())
n_batchs = int(mnist.train.num_examples/batch_size)
for i in range(n_epochs):
total_loss = 0
for _ in range (n_batchs):
X_batch,Y_batch = mnist.train.next_batch(batch_size)
_, loss_batch = sess.run([optimizer, loss],feed_dict={X:X_batch,Y:Y_batch})
total_loss += loss_batch
print('Average loss in a batch (Epoch {0}): {1}'.format(i,total_loss/n_batchs))
print('Total time: {0} seconds '.format(time.time() - start_time))
print('Optimization Done!')
preds = tf.nn.softmax(logits)
isCorrect_preds = tf.equal(tf.argmax(preds,1),tf.argmax(Y,1))
accuracy = tf.reduce_sum(tf.cast(isCorrect_preds,tf.float32))
n_batchs = int(mnist.test.num_examples/batch_size)
total_correct_preds = 0
for i in range(n_batchs):
X_batch,Y_batch = mnist.test.next_batch(batch_size)
accuracy_batch = sess.run([accuracy],feed_dict={X:X_batch,Y:Y_batch})
total_correct_preds += accuracy_batch[0]
print('Accuracy: {0}'.format(total_correct_preds/mnist.test.num_examples))
writer.close()
正确率在0.9左右。
3、用DNN做MNIST手写数字识别
1.准备好数据、placeholder、Variable
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('/data/mnist',one_hot=True)
X = tf.placeholder(tf.float32,[None,784],name='X_placeholder')
Y = tf.placeholder(tf.int8,[None,10],name='Y_placeholder')
n_input = 784
n_hidden_1 = 256
n_hidden_2 = 256
n_hidden_3 = 256
n_output = 10
Weights = {'h1':tf.Variable(tf.random_normal([n_input,n_hidden_1]),name='W1'),
'h2':tf.Variable(tf.random_normal([n_hidden_1,n_hidden_2]),name='W2'),
'h3':tf.Variable(tf.random_normal([n_hidden_2,n_hidden_3]),name='W3'),
'out':tf.Variable(tf.random_normal([n_hidden_3,n_output]),name='W4')}
biases = {'b1':tf.Variable(tf.random_normal([n_hidden_1]),name='b1'),
'b2':tf.Variable(tf.random_normal([n_hidden_2]),name='b2'),
'b3':tf.Variable(tf.random_normal([n_hidden_3]),name='b3'),
'out':tf.Variable(tf.random_normal([n_output]),name='b4')}
2.定义loss、optimizer
def multilayer_perceptron(x, weights, biases):
layer_1 = tf.add(tf.matmul(x, weights['h1']),biases['b1'])
layer_1 = tf.nn.relu(layer_1)
layer_2 = tf.add(tf.matmul(layer_1,weights['h2']),biases['b2'])
layer_2 = tf.nn.relu(layer_2)
layer_3 = tf.add(tf.matmul(layer_2,weights['h3']),biases['b3'])
layer_3 = tf.nn.relu(layer_3)
output_layer = tf.add(tf.matmul(layer_3,weights['out']),biases['out'])
return output_layer
logits = multilayer_perceptron(X, Weights, biases)
entropy = tf.nn.softmax_cross_entropy_with_logits(logits=logits,labels=Y,name='entropy')
loss = tf.reduce_mean(entropy)
learning_rate = 0.003
optimizer = tf.train.AdamOptimizer(learning_rate).minimize(loss)
3.在Session中执行Graph
batch_size = 128
n_epochs = 51
n_batchs = int(mnist.train.num_examples/batch_size)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
writer = tf.summary.FileWriter('./graphs/MLP_DNN',sess.graph)
for i in range (n_epochs):
avg_loss = 0
for _ in range (n_batchs):
x_batch,y_batch = mnist.train.next_batch(batch_size)
_,l = sess.run([optimizer,loss],feed_dict={X:x_batch,Y:y_batch})
avg_loss += l / n_batchs
if i%5 == 0:
print('Epoch {0}: avg_loss = {1}'.format(i,avg_loss))
print('Optimization Done!')
isCorrect = tf.equal(tf.argmax(logits,1),tf.argmax(Y,1))
accuracy = tf.reduce_mean(tf.cast(isCorrect,tf.float32))
print('Accuracy: {0}'.format(accuracy.eval({X:mnist.test.images,Y:mnist.test.labels})))
writer.close()
试了一下,两个隐层的DNN正确率可达96%,三个隐层的DNN正确率可达97%。
附一张解释reduction_indices的图:
via Tensorflow 的reduce_sum()函数到底是什么意思,谁能解释下?