手动处理MNIST手写数据集的逻辑斯蒂回归算法实践

本文介绍了手动处理MNIST手写数据集并使用Tensorflow实现逻辑斯蒂回归的过程。首先解释了为何要自行处理数据,然后提供处理数据的代码,并详细解析训练模型的逻辑,包括数据预处理、模型定义、损失函数选择以及数据填充到模型的方法。文章还提到了使用One Hot编码的重要性,并警告了在Tensorflow中避免出现Nan值的陷阱。
摘要由CSDN通过智能技术生成

打算基于这个写一篇深入理解Tensorflow搭建模型的文章。从MNIST数据的手动处理开始谈起。

MNIST二进制数据集探索–基于Numpy处理这篇文章里,给出了处理MNIST二进制数据的代码。

首先问,为什么要自己动手处理这个二进制数据集呢?

第一,原因在于我们可以这么做,且MNIST数据量很小,训练集和测试集加起来就100多MB。60000 + 10000条数据。

第二,如果是用官方的教程,数据获取方式是:

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("/tmp/data/", one_hot=True) # 自动one_hot编码

然后在后面用到时,只需要:

batch_xs, batch_ys = mnist.train.next_batch(batch_size) # 获取一个batch的数据
print("Accuracy:", accuracy.eval({x: mnist.test.images, y: mnist.test.labels})) # 直接拿到数据

这对于学习TensorFlow这里的Tensor如何Flow并没有太大的助益。

如果我们能对数据集更加了解,知道如何处理填充给模型,就会很舒服。

不多说,先把代码丢上来:

import tensorflow as tf 
import numpy as np 
from load_ubyte_image import *

# mnist = 
train_data_filename = "./datasets/mnist/train-images-idx3-ubyte"
train_label_filename = "./datasets/mnist/train-labels-idx1-ubyte"

test_data_filename = "./datasets/mnist/t10k-images-idx3-ubyte"
test_label_filename = "./datasets/mnist/t10k-labels-idx1-ubyte"

imgs, data_head = loadImageSet(train_data_filename)
# 这里的label是60000个数字,需要转成one-hot编码
labels, labels_head = loadLabelSet(train_label_filename)


test_images, test_images_head = loadImageSet(test_data_filename)
test_labels, test_labels_head = loadLabelSet(test_label_filename)

# 手动one_hot编码
def encode_one_hot(labels):
    num = labels.shape[0]
    res = np.zeros((num,10))
    for i in range(num):
        res[i,labels[i]] = 1 # labels[i]表示0,1,2,3,4,5,6,7,8,9,则对应的列是1,这就是One-Hot编码</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值