使用一个神经元处理mnist手写体识别
mnist数据集划分:训练集 55000 验证集5000 测试集 10000
mnist中每张图片为28*28=784个像素点的灰度图
涉及分类问题与逻辑回归
损失函数:
线性回归——平方损失函数
二元逻辑回归——对数损失函数(凸函数)
多元逻辑回归——交叉熵损失函数
1.卷积神经网络
卷积神经网络CNN搭建导图
LeNet-5卷积神经网络
单个神经元模型:
2.导入相关模块
import tensorflow as tf
import urllib
#tensoflow提供了数据集读取方法
from tensorflow.examples.tutorials.mnist import input_data
#MNIST数据集文件在读取时如果指定目录下不存在,则会自动下载,需等待一定时间,如果已经存在了,则直接读取
mnist = input_data.read_data_sets("MNIST_data/", one_hot = True) #one_hot独热编码:一种稀疏向量,其中一个元素设为1,所有其他元素均设为0
#用于图像可视化
import numpy as np
import matplotlib.pyplot as plt
输出结果:
Extracting MNIST_data/train-images-idx3-ubyte.gz
Extracting MNIST_data/train-labels-idx1-ubyte.gz
Extracting MNIST_data/t10k-images-idx3-ubyte.gz
Extracting MNIST_data/t10k-labels-idx1-ubyte.gz
3.模型的构建
num_classes = 10#数据类型0-9,10个类别
input_size = 784#28*28=784个像素点
#定义待输入数据的占位符
x = tf.placeholder (tf.float32, shape = [None, input_size],name="X") #None指行不要设,因为是批量处理数据
y = tf.placeholder (tf.float32, shape = [None, num_classes],name="Y")
#定义模型变量,以正态分布的随机数初始化权重W,以常数0初始化偏置b
W=tf.Variable(tf.random_normal([input_size,num_classes]),name="W") #tf.random_normal函数:正态分布随机数 784*10=7840个权重
b=tf.Variable(tf.zeros([10]),name="b") #加10,7850个参数
#用单个神经元构建神经网络
forward = tf.matmul(x,W)+b #前向计算
pred=tf.nn.softmax(forward)#Softmax分类
4.训练模型
#设置训练参数