tensorflow笔记DAY02【连载】

tensorflow入门

  • 一、非线性回归
    • 1、生成样本点
    • 2、定义变量对应的占位符
    • 3、定义网络架构
      • 1、中间层
      • 2、输出层
    • 4、定义损失函数
    • 5、开始训练
  • 二、分类问题
    • 1、数据集说明
    • 2、载入数据集
    • 3、定义变量对应占位符
    • 4、定义网络框架
    • 5、定义损失函数&优化器
    • 6、变量初始化
    • 7、准确率求取
    • 8、开始训练

一、非线性回归

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

1、生成样本点

x_data=np.linspace(-0.5,0.5,200)[:,np.newaxis]
noise=np.random.normal(0,0.2,x_data.shape)
y_data=np.square(x_data)+noise

说明:
x_data=np.linspace(-0.5,0.5,200) 意思是
在这个范围内产生200个点,服从均匀分布,一维,一行=一个样本点
x_data[:,np.newaxis] 意思是得到二维数组,将一维数据存在:,然后用np.newaxis拓展 200,1

2、定义变量对应的占位符

x=tf.placeholder(tf.float32,[None,1])
y=tf.placeholder(tf.float32,[None,1])

说明:None,1 ==> 行不确定,列是1列

3、定义网络架构

1—10----1

1、中间层

Weights_L1=tf.Variable(tf.random_normal([1,10])) #一行10列
biases_L1=tf.Variable(tf.zeros([1,10]))
Wx_plus_b_L1=tf.matmul(x,Weights_L1)+biases_L1
L1=tf.nn.tanh(Wx_plus_b_L1) #激活函数生成中间层输出

2、输出层

Weights_L2=tf.Variable(tf.random_normal([10,1]))
biases_L2=tf.Variable(tf.zeros([1,1]))
Wx_plus_b_L2=tf.matmul(L1,Weights_L2)+biases_L2
prediction=tf.nn.tanh(Wx_plus_b_L2)

4、定义损失函数

loss=tf.reduce_mean(tf.square(y-prediction))
train_step=tf.train.GradientDescentOptimizer(0.1).minimize(loss)

5、开始训练

with tf.Session() as sess: 
    #变量初始化
    sess.run(tf.global_variables_initializer())
    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) #r- 红色实线 lw 线宽
    plt.savefig('result.jpg')
    plt.show()

说明:获取预测值这里,我们回顾一下预测值的Op是这样的:
prediction=tf.nn.tanh(Wx_plus_b_L2),那这里就是说回涉及输入样本x,所以要喂入x_data
最后结果如下:
tensorflow笔记DAY02【连载】_第1张图片

二、分类问题

1、数据集说明

mnist数据集。这里强烈建议直接手动下载,因为如果用代码调库,真的很慢
MNIST数据集
每一张图片包含2828个像素,我们把这一个数组展开成一个向量,长度是2828=784。
在MNIST训练数据集中mnist.train.images 是一个形状为[60000,784]的张量
第一维度数字用来索引图片,第二维度数字用来索引每张图片的像素点。
图片里的某个像素的强度值介于0-1之间

784—10
输入层784。每张图片是28*28=784个像素点。那么就每张图片中的784个像素点输入到神经网络,
并与对应的标签一起训练

2、载入数据集

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

3、定义变量对应占位符

x=tf.placeholder(tf.float32,[None,784])
y=tf.placeholder(tf.float32,[None,10])

4、定义网络框架

784–10

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

5、定义损失函数&优化器

loss=tf.reduce_mean(tf.square(y-prediction))
train_step=tf.train.RMSPropOptimizer(0.2).minimize(loss) 

6、变量初始化

init=tf.global_variables_initializer()

7、准确率求取

correct_prediction=tf.equal(tf.argmax(y,1),tf.argmax(prediction,1))
accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))

8、开始训练

with tf.Session() as sess:
	sess.run(init)
	for epoch in range(200):
		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}
		if epoch%10==0:
			acc=sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels})
			print('Iter '+str(epoch)+" ,Testing Accuracy "+str(acc))

防止遗忘了。

你可能感兴趣的:(tensorflow笔记)