使用线性回归识别手写阿拉伯数字mnist数据集

学习了tensorflow的线性回归。

首先是一个sklearn中makeregression数据集,对其进行线性回归训练的例子。来自腾讯云实验室

import tensorflow as tf
import numpy as np
class linearRegressionModel:
    def __init__(self,x_dimen):
        self.x_dimen=x_dimen
        self._index_in_epoch=0
        self.constructModel()
        self.sess=tf.Session()
        self.sess.run(tf.global_variables_initializer())
    #权重初始化
    def weight_variable(self,shape):
        initial=tf.truncated_normal(shape,stddev=0.1)
        return tf.Variable(initial)
    #偏置项初始化
    def bais_variable(self,shape):
        initial=tf.constant(0.1,shape=shape)
        return tf.Variable(initial)
    #获取数据块,每次选100个样本,如果选完,则重新打乱
    def next_batch(self,batch_size):
        start=self._index_in_epoch
        self._index_in_epoch+=batch_size
        if self._index_in_epoch>self._num_datas:
            perm=np.arange(self._num_datas)
            np.random.shuffle(perm)
            self._datas=self._datas[perm]
            self._labels=self._labels[perm]
            start=0
            self._index_in_epoch=batch_size
            assert batch_size<=self._num_datas
        end=self._index_in_epoch
        return self._datas[start:end],self._labels[start:end]
    def constructModel(self):
        self.x=tf.placeholder(tf.float32,[None,self.x_dimen])
        self.y=tf.placeholder(tf.float32,[None,1])
        self.w=self.weight_variable([self.x_dimen,1])
        self.b=self.bais_variable([1])
        self.y_prec=tf.nn.bias_add(tf.matmul(self.x,self.w),self.b)
        mse=tf.reduce_mean(tf.squared_difference(self.y_prec,self.y))
        l2=tf.reduce_mean(tf.square(self.w))
        #self.loss=mse+0.15*l2
        self.loss=mse
        self.train_step=tf.train.AdamOptimizer(0.1).minimize(self.loss)
    def train(self,x_train,y_train,x_test,y_test):
        self._datas=x_train
        self._labels=y_train
        self._num_datas=x_train.shape[0]
        for i in range(5000):
            batch=self.next_batch(100)
            self.sess.run(self.train_step,
                          feed_dict={
                              self.x:batch[0],
                              self.y:batch[1]
                          })
            if i%10==0:
                train_loss=self.sess.run(self.loss,feed_dict={
                    self.x:batch[0],
                    self.y:batch[1]
                })
                print("setp %d,test_loss %f"%(i,train_loss))
    def predict_batch(self,arr,batchsize):
            for i in range(0,len(arr),batchsize):
                yield arr[i:i+batchsize]
    def predict(self,x_predict):
        pred_list=[]
        for x_test_batch in self.predict_batch(x_predict,100):
            pred =self.sess.run(self.y_prec,{self.x:x_test_batch})
            pred_list.append(pred)
        return np.vstack(pred_list)

仿照这个代码,联系使用线性回归的方法对mnist进行训练。开始选择学习率为0.1,结果训练失败,调节学习率为0.01.正确率在0.91左右

给出训练类:

import tensorflow as tf
import numpy as np
class myLinearModel:
    def __init__(self,x_dimen):
        self.x_dimen=x_dimen
        self.epoch=0
        self._num_datas=0
        self.datas=None
        self.lables=None
        self.constructModel()
    def get_weiInit(self,shape):
        weiInit=tf.truncated_normal(shape)
        return tf.Variable(weiInit)
    def get_biasInit(self,shape):
        biasInit=tf.constant(0.1,shape=shape)
        return tf.Variable(biasInit)
    def constructModel(self):
        self.x = tf.placeholder(dtype=tf.float32,shape=[None,self.x_dimen])
        self.y=tf.placeholder(dtype=tf.float32,shape=[None,10])
        self.weight=self.get_weiInit([self.x_dimen,10])
        self.bias=self.get_biasInit([10])
        self.y_pre=tf.nn.softmax(tf.matmul(self.x,self.weight)+self.bias)
        self.correct_mat=tf.equal(tf.argmax(self.y_pre,1),tf.argmax(self.y,1))
        #self.loss=tf.reduce_mean(tf.squared_difference(self.y_pre,self.y))
        self.loss=-tf.reduce_sum(self.y*tf.log(self.y_pre))
        self.train_step = tf.train.GradientDescentOptimizer(0.01).minimize(self.loss)
        self.accuracy=tf.reduce_mean(tf.cast(self.correct_mat,"float"))
    def next_batch(self,batchsize):
        start=self.epoch
        self.epoch+=batchsize
        if self.epoch>self._num_datas:
            perm=np.arange(self._num_datas)
            np.random.shuffle(perm)
            self.datas=self.datas[perm,:]
            self.lables=self.lables[perm,:]
            start=0
            self.epoch=batchsize
        end=self.epoch
        return self.datas[start:end,:],self.lables[start:end,:]
    def train(self,x_train,y_train,x_test,y_test):
        self.datas=x_train
        self.lables=y_train
        self._num_datas=(self.lables.shape[0])
        with tf.Session() as sess:
            sess.run(tf.global_variables_initializer())
            for i in range(5000):
                batch=self.next_batch(100)
                sess.run(self.train_step,feed_dict={
                    self.x:batch[0],
                    self.y:batch[1]
                })
                if 1:
                    train_loss = sess.run(self.loss, feed_dict={
                        self.x: batch[0],
                        self.y: batch[1]
                    })
                    print("setp %d,test_loss %f" % (i, train_loss))
                    #print("y_pre",sess.run(self.y_pre,feed_dict={                        self.x: batch[0],
                    #    self.y: batch[1]}))
                    #print("*****************weight********************",sess.run(self.weight))
            print(sess.run(self.accuracy,feed_dict={self.x:x_test,self.y:y_test}))

然后是调用方法,包括了对这个mnist数据集的下载

from myTensorflowLinearModle import myLinearModel as mlm
import tensorflow.examples.tutorials.mnist.input_data as input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

if __name__==‘__main__‘:

    x_train,x_test,y_train,y_test=mnist.train.images,mnist.test.images,mnist.train.labels,mnist.test.labels
    linear = mlm(len(x_train[1]))
    linear.train(x_train,y_train,x_test,y_test)

下载方法来自tensorflow的官方文档中文版

原文地址:https://www.cnblogs.com/superxuezhazha/p/9531783.html

时间: 2024-11-08 11:33:38

使用线性回归识别手写阿拉伯数字mnist数据集的相关文章

数据挖掘入门系列教程(八)之使用神经网络(基于pybrain)识别数字手写集MNIST

目录 数据挖掘入门系列教程(八)之使用神经网络(基于pybrain)识别数字手写集MNIST 下载数据集 加载数据集 构建神经网络 反向传播(BP)算法 进行预测 F1验证 总结 参考 数据挖掘入门系列教程(八)之使用神经网络(基于pybrain)识别数字手写集MNIST 在本章节中,并不会对神经网络进行介绍,因此如果不了解神经网络的话,强烈推荐先去看<西瓜书>,或者看一下我的上一篇博客:数据挖掘入门系列教程(七点五)之神经网络介绍 本来是打算按照<Python数据挖掘入门与实践>

学习笔记TF024:TensorFlow实现Softmax Regression(回归)识别手写数字

TensorFlow实现Softmax Regression(回归)识别手写数字.MNIST(Mixed National Institute of Standards and Technology database),简单机器视觉数据集,28X28像素手写数字,只有灰度值信息,空白部分为0,笔迹根据颜色深浅取[0, 1], 784维,丢弃二维空间信息,目标分0~9共10类.数据加载,data.read_data_sets, 55000个样本,测试集10000样本,验证集5000样本.样本标注信

第6章 识别手写字体

前言 神经网络是一种很特别的解决问题的方法.本书将用最简单易懂的方式与读者一起从最简单开始,一步一步深入了解神经网络的基础算法.本书将尽量避开让人望而生畏的名词和数学概念,通过构造可以运行的Java程序来实践相关算法. 关注微信号"javaresearcher"来获取本书的更多信息. 这一章节我们将会解决一个真正的问题:手写字体识别.我们将识别像下面图中这样的手写数字. 在开始之前,我们先要准备好相应的测试数据.我们不能像前边那样简单的产生手写字体,毕竟我们自己还不知道如何写出一个产生

一文全解:利用谷歌深度学习框架Tensorflow识别手写数字图片(初学者篇)

笔记整理者:王小草 笔记整理时间2017年2月24日 原文地址 http://blog.csdn.net/sinat_33761963/article/details/56837466?fps=1&locationNum=5 Tensorflow官方英文文档地址:https://www.tensorflow.org/get_started/mnist/beginners 本文整理时官方文档最近更新时间:2017年2月15日 1.案例背景 本文是跟着Tensorflow官方文档的第二篇教程–识别手

TensorFlow实战之Softmax Regression识别手写数字

     关于本文说明,本人原博客地址位于http://blog.csdn.net/qq_37608890,本文来自笔者于2018年02月21日 23:10:04所撰写内容(http://blog.csdn.net/qq_37608890/article/details/79343860).        本文根据最近学习TensorFlow书籍网络文章的情况,特将一些学习心得做了总结,详情如下.如有不当之处,请各位大拿多多指点,在此谢过. 一.相关概念 1.MNIST MNIST(Mixed

Python神经网络是这样识别手写字符哒?

点击关注异步图书,置顶公众号 每天与你分享 IT好书 技术干货 职场知识 参与文末话题讨论,每日赠送异步图书 --异步小编 当谷歌的AlphaGo战胜了人类顶级棋手,人工智能开始更多进入大众视野.而谷歌AI教父认为:"AlphaGo有直觉神经网络已接近大脑". 千百年来,人类试图了解智能的机制,并将它复制到思维机器上.而从不满足于让机械或电子设备帮助做一些简单的任务,例如,使用燧石打火,使用滑轮吊起沉重的岩石,使用计算器做算术. 相反,我们希望能够自动化执行更具有挑战性.相对复杂的任务

用BP人工神经网络识别手写数字

http://wenku.baidu.com/link?url=HQ-5tZCXBQ3uwPZQECHkMCtursKIpglboBHq416N-q2WZupkNNH3Gv4vtEHyPULezDb50ZcKor41PEikwv5TfTqwrsQ4-9wmH06L7bYD04u 用BP人工神经网络识别手写数字 yzw20091201上传于2013-01-31|暂无评价|356人阅读|13次下载|暂无简介|举报文档 在手机打开 赖勇浩( http://laiyonghao.com ) 这是我读工

12 使用卷积神经网络识别手写数字

看代码: 1 import tensorflow as tf 2 from tensorflow.examples.tutorials.mnist import input_data 3 4 # 下载训练和测试数据 5 mnist = input_data.read_data_sets('MNIST_data/', one_hot = True) 6 7 # 创建session 8 sess = tf.Session() 9 10 # 占位符 11 x = tf.placeholder(tf.f

python实现KNN,识别手写数字

写了识别手写数字的KNN算法,如下图所示.参考链接http://blog.csdn.net/april_newnew/article/details/44176059. # -*- coding: utf-8 -*- import numpy as np import pandas as pd import os def readtxt(filename): text=[] f = open(filename,'r',encoding='utf-8') for line in f.readlin