deeplearning----利用逻辑回归分类MINIST数字

时间:2022-01-01 04:28:50

Google实验室的Corinna Cortes和纽约大学柯朗研究所的Yann LeCun建有一个手写数字数据库,训练库有60,000张手写数字图像,测试库有10,000张。

请访问原站 http://yann.lecun.com/exdb/mnist/



模型


 对数回归模型是线性概率分类器,它有两个参数,权重矩阵W和偏移向量b.分类的过程是把数据投影到一组高维超平面上,数据和平面的距离反应了它属于这个类别的概率。这个模型的数学公式可以表示为:

deeplearning----利用逻辑回归分类MINIST数字#

模型的输出即为预测的结果,它的值为:

deeplearning----利用逻辑回归分类MINIST数字

代码如下:



原例子中的mnist.pkl.gz是压缩后的数据族,为了能够便于C++直接处理,我们首先把mnist.pkl.gz改成易于处理的数据-结果对,即:将mnist.pkl解压为6个文件:

train_set_x,  train_set_y

valid_set_x, valid_set_y

test_set_x, test_set_y

对应train,valid,test三个集合(每个集合两对,即数据-结果对)。

train_set_x中的784列对应train_set_y中的一行,即代表一个测试数据集合。其中train_set_x每一行是一个浮点数,784行(784为28x28的灰度浮点数 )代表一个数字的灰度图,对应train_set_y的一行,即对应的数字。

 

这个python程序如下,很简单,写成文本文件好了,然后再写一个C++程序读这个文本文件,转成相关的 二进制文件。

 我的python版本是2.7,所以与3.X版本的语法上有区别,要注意:

# -*- coding: utf-8 -*-
"""
Spyder Editor

This temporary script file is located here:
C:\Users\asus\.spyder2\.temp.py
"""
import pickle

f = open(r'e:\mnist.pkl', 'rb')
#write_file=open(r'e:\ab.txt','wb')
train_set,valid_set, test_set = pickle.load(f)

f.close()

test_set_x, test_set_y = test_set

train_set_x, train_set_y = train_set

valid_set_x, valid_set_y = valid_set


cnt = 0

fileHandle=open(r'e:\test_set_x.txt',"w")

for i in test_set_x:

if cnt% 10 ==0:

print cnt
print 'test_x'

cnt= cnt +1

for j in i:

fileHandle.write("%.6f\n"%j)


fileHandle.close()



cnt = 0

fileHandle=open(r'e:\test_set_y.txt',"w")

for i in test_set_y:

if cnt% 10 ==0:

print cnt
print 'test_y'

cnt= cnt +1

fileHandle.write("%d\n"%i)



fileHandle=open(r'e:\train_set_x.txt',"w")


cnt=0

for i in train_set_x:

if cnt% 10 ==0:

print cnt
print 'train_x'

cnt= cnt +1

for j in i:

fileHandle.write("%.6f\n"%j)

fileHandle.close()


fileHandle=open(r'e:\train_set_y.txt',"w")

cnt=0

for i in train_set_y:

if cnt% 10 ==0:

print cnt
print 'train_y'

cnt= cnt +1

fileHandle.write("%d\n"%i)