【Tensorflow tf 掏粪记录】笔记二——用SVM打造全连接神经网络识别MNIST数据集

这篇博客介绍了使用Tensorflow手工实现SVM全连接神经网络,以识别MNIST数据集的过程。作者从下载数据集、数据预处理、初始化参数、前向传播、损失计算到模型训练进行了详细阐述,并分享了完整项目代码。
摘要由CSDN通过智能技术生成

由于我个人的原因,在写了第一篇tensorflow安装教程后就暂停了更新博客。可是我并没有停止前进的步伐,因为我习惯了做书面的笔记了。可是书面笔记,容易破损啊啊啊啊!!!


在深度学习中,入门的项目是MNIST数据集的分类识别。就好比我们学各种编程语言时候的Hello World!

下载MNIST数据集


这里下载MNIST数据集。点击如下图所示按钮下载:
训练图片,训练标签,测试图片,测试标签
这里写图片描述
入门级别数据集,不大才11MB。很快就下载好了。

当然我们也可以用如下代码在程序中下载,不过我当时做的项目中没有用此方法。

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets( 'MNIST_data' )

在这个项目里,我并没有用多少tensorflow提供的API接口来实现,更多是用tf的运算来实现整个神经网络。(真的累)

开车先造轮(加载MNIST数据)


想代码跑起来,轮子必不可少。读取数据方面的轮子是参考一个关于MNIST开源的项目写的。

调包

首先调包。(每个程序猿都是一名合格的调包侠)

import math
import numpy as np
import h5py
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.python.framework import ops
from LoadData import DataUtils

数据的处理

读取数据

def main():
trainFile_x = 'D:/PycharmProjects/MNIST/MNIST_data/train-images.idx3-ubyte'    # 读取训练集文件,后面为训练集的存放地址
    trainFile_y = 'D:/PycharmProjects/MNIST/MNIST_data/train-labels.idx1-ubyte'    # 读取训练集标签文件,后面为训练集标签的存放地址
    testFile_x = 'D:/PycharmProjects/MNIST/MNIST_data/t10k-images.idx3-ubyte'    # 读取测试集文件,后面为测试集的存放地址
    testFile_y = 'D:/PycharmProjects/MNIST/MNIST_data/t10k-labels.idx1-ubyte'    # 读取测试集标签文件,后面为测试集标签的存放地址

    train_X = DataUtils( fileName = trainFile_x ).getImage()    # 获取训练集
    train_Y = DataUtils( fileName = trainFile_y ).getLabel()    # 获取训练集标签
    test_X = DataUtils( testFile_x ).getImage()    # 获取测试集
    test_Y = DataUtils( testFile_y ).getLabel()    # 获取测试集标签

    return train_X, train_Y, test_X, test_Y

one_hot_matrix

把训练集与测试集的标签按指定的个数大小进行tf.one_hot()
处理。

def one_hot_matrix( labels, C ):

    C = tf.constant( C, name = "C" )
    one_hot_matrix = tf.one_hot( labels, C, axis = 0 )
    one_hot = sess.run( one_hot_matrix )
    return one_hot

数组的转置

我们要把训练集与测试集转置下,因为我个人喜欢一张图片放为一个列。
同时我们也对标签进行了one_hot_matrix()处理

def fit_data():
    train_X, train_Y, test_X, test_Y = main()
    train_X, test_X, = train_X.T, test_X.T

'''--------进行one_hot处理--------'''
    train_Y = one_hot_matrix( train_Y, 10 )
    test_Y = one_hot_matrix( test_Y, 10 )

随机mini_batches

def random_mini_batches( X, Y, mini_batch_size ):
    m = X.shape[1]    # 获取MNIST数据集中的训练集的个数
    mini_batches = []

'''-------实现随机操作--------'''
    permutation = list( np.random.permutation( m ) )
    shuffled_X = X[:, permutation]
    shuffled_Y = Y[:, permutation]

'''--------进行mini_batches分配--------'''
    num_complete_minibatches = math.floor( m / mini_batch_size )
    for k in range( 0, num_complete_minibatches ):
        mini_batch_X = shuffled_X[:, k * mini_batch_size : mini_batch_size * ( k + 1 )]
        mini_batch_Y = shuffled_Y[:, k * mini_batch_size : mini_batch_size * ( k + 1 )]
        mini_batch = ( mini_batch_X, mini_batch_Y )
        mini_batches.append( mini_batch )

'''--------把剩下的训练集分到一个batch中--------'''
    if m % mini_batch_size != 0:
        mini_batch_X = shuffled_X[:, mini_batch_size * num_complete_minibatches : m]
        mini_batch_Y = shuffled_Y[:, mini_batch_size * num_complete_minibatches : m]

'''--------把对应的训练集测试集按元组组成mini_batch并放入mini_batches中--------'''
        mini_batch = ( mini_batch_X, mini_batch_Y )
        mini_batches.append( mini_batch )

    return mini_batches

初始化参数

def initialize_parameters():

'''--------初始化第一层神经网络--------'''
    W1 = tf.get_variable( 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值