二、Tensorflow线性回归、分类

二、Tensorflow线性回归、分类

关于np.random的一些属性介绍,

可参考:https://www.jianshu.com/p/c05b873846b8

np.random.rand(d0,d1,d2,,,dn)根据d0‐dn创建随机数数组,浮点数, [0,1),均匀分布

np.random.randn(d0,d1,d2,,,dn)根据d0‐dn创建随机数数组,标准正态分布

np.random.randint(a,b,size=c)

numpy.random_normal(loc=0,scale=1e-2,size=shape),三个参数分别为平均数、标准差、生成的矩阵形状

np.linspace(a,b,c) 表示在[a,b]中产生c个数据,后边加[:np.newaxis]表示列数为1,共有c行;[np.newaxis,:]表示有1行,c列、

range(start, stop[, step]),这里的range不包括stop的值,如range(5)表示[0,1,2,3,4]

plt.figure()作用是新建绘画窗口,独立显示绘画的图片

plt.subplot()作用是在一个窗口里,画出多个图片,其中有三个参数:r -表示行数,c  -表示列行,n -表示第几个

1.线性回归:(一元二次方程)

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

# 程序目的是找出输入数据的回归线

# 确定输入和输出数据
input_data=np.linspace(-0.5,0.5,200).reshape(1,200)
noise=np.random.normal(0,0.03,input_data.shape)
y_data=np.square(input_data)+noise

tf.reset_default_graph()
#建立输出数据
x=tf.placeholder(tf.float64,[1,200])
y=tf.placeholder(tf.float64,[1,200])

# 建立隐藏层
weight_L1=tf.Variable(tf.random_normal([10,1],dtype=tf.float64))
b_l1=tf.Variable(tf.zeros([10,1],dtype=tf.float64))
pre_L1=tf.matmul(weight_L1,x)+b_l1
L1=tf.nn.tanh(pre_L1)

# 建立输出层
weight_L2=tf.Variable(tf.random_normal([1,10],dtype=tf.float64))
b_l2=tf.Variable(tf.zeros([1,1],dtype=tf.float64))
pre_L2=tf.matmul(weight_L2,L1)+b_l2
predict_y=tf.nn.tanh(pre_L2)

# 建立优化模型
loss=tf.reduce_mean(tf.square(y_data-predict_y))
train=tf.train.GradientDescentOptimizer(0.2).minimize(loss)
ini=tf.global_variables_initializer()
# 建立会话

with tf.Session() as sess:
    sess.run(ini)
    for i in range(2001):
        sess.run(train,feed_dict={x:input_data})
    predict_value=sess.run(predict_y,feed_dict={x:input_data})
    # print(type(input_data),type(predict_value))
# 画出示意图
    plt.figure()
    plt.scatter(input_data,y_data)
    plt.plot(input_data,predict_value,'bs',lw=5)
    plt.show()

 

二、Tensorflow线性回归、分类

其中遇到的问题是,设置画出线的形状时,出现了‘-’和‘--’无法显示的情况,换了种显示线形状即可。

2.对于softmax函数而言

二、Tensorflow线性回归、分类

3.实现Mnist数据集的分类

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

# 实现mnist数据集的分类

# 输入数据,确定batch
mnist=input_data.read_data_sets('/home/zyy/桌面/mnist',one_hot=True)
batch_size=100
n_batch=mnist.train.num_examples//batch_size

# 建立占位符
x=tf.placeholder(tf.float32,[784,None])
y=tf.placeholder(tf.float32,[10,None])

# 建立5个神经元的隐藏层和一个输出层
# weight_L1=tf.Variable(tf.zeros((5,784)))
# b_L1=tf.Variable(tf.zeros((5,1)))
# pre_L1=tf.nn.tanh(tf.matmul(weight_L1,x)+b_L1)

weight=tf.Variable(tf.zeros((10,784)))
b=tf.Variable(tf.zeros((10,1)))
pred_y=tf.nn.softmax(tf.matmul(weight,x)+b)

# 确定loss和优化器
loss=tf.reduce_mean(tf.square(y-pred_y))
train=tf.train.GradientDescentOptimizer(0.3).minimize(loss)

# 计算准确率
corrance=tf.equal(tf.arg_max(y,0),tf.arg_max(pred_y,0))
accurcy=tf.reduce_mean(tf.cast(corrance,tf.float32))

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

# 启动Session
with tf.Session() as sess:
    sess.run(ini)
    for echo in range(300):
        for step in range(n_batch):
            batch_img,batch_labels=mnist.train.next_batch(batch_size)
            sess.run(train,feed_dict={x:np.transpose(batch_img),y:np.transpose(batch_labels)})

        acc=sess.run(accurcy,feed_dict={x:np.transpose(mnist.test.images),y:np.transpose(mnist.test.labels)})
        print("Iteration"+str(echo) +",Testing accuracy:"+str(acc))

 

最终优化可达到88%