标签: mnist

Tensorflow - 使用我自己的图像测试mnist神经网络

我正在尝试编写一个脚本,允许我绘制一个数字图像,然后确定在MNIST上训练的模型的数字.

这是我的代码:

import random
import image
from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf
import numpy as np
import scipy.ndimage

mnist = input_data.read_data_sets( "MNIST_data/", one_hot=True )

x = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))

y = tf.nn.softmax(tf.matmul(x, W) + b)
y_ = tf.placeholder(tf.float32, [None, 10])

cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))

train_step = tf.train.GradientDescentOptimizer(0.5).minimize (cross_entropy)

init = tf.initialize_all_variables()

sess = tf.Session()
sess.run(init)

for i in range( 1000 ):
    batch_xs, batch_ys = mnist.train.next_batch( 1000 )
    sess.run(train_step, feed_dict= …
Run Code Online (Sandbox Code Playgroud)

python numpy mnist tensorflow

10
推荐指数
1
解决办法
3824
查看次数

Tensorflow权重初始化

关于张量流网站上的MNIST教程,我进行了一项实验(要点),看看不同权重初始化对学习的影响.我注意到,根据我在流行的[Xavier,Glorot 2010]论文中所读到的内容,无论重量初始化如何,学习都很好.

不同重量初始化的学习曲线平均超过3次运行

不同的曲线表示w用于初始化卷积和完全连接的层的权重的不同值.请注意,所有值w做工精细,即使0.31.0以更低的性能结束和一些价值观培养更快-尤其是0.030.1是最快的.然而,该图显示了相当大范围的w工作,表明重量初始化的"稳健性".

def weight_variable(shape, w=0.1):
  initial = tf.truncated_normal(shape, stddev=w)
  return tf.Variable(initial)

def bias_variable(shape, w=0.1):
  initial = tf.constant(w, shape=shape)
  return tf.Variable(initial)
Run Code Online (Sandbox Code Playgroud)

问题:为什么这个网络不会受到消失或爆炸梯度问题的影响?

我建议你阅读有关实现细节的要点,但这里是代码供参考.我的nvidia 960m花了大约一个小时,虽然我想它也可以在合理的时间内在CPU上运行.

import time
from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf
from tensorflow.python.client import device_lib

import numpy
import matplotlib.pyplot as pyplot

mnist = input_data.read_data_sets('MNIST_data', one_hot=True)

# Weight initialization

def weight_variable(shape, w=0.1):
  initial …
Run Code Online (Sandbox Code Playgroud)

mnist deep-learning tensorflow

10
推荐指数
2
解决办法
2万
查看次数

如何将我的数据集放在.pkl文件中,使用"mnist.pkl.gz"中使用的确切格式和数据结构?

我正在尝试使用python中的Theano库对Deep Belief Networks进行一些实验.我使用此地址中的代码:DBN完整代码.此代码使用MNIST手写数据库.此文件已处于pickle格式.它是unicked in:

  • 动车组
  • valid_set
  • TEST_SET

在下面进一步展开:

  • train_set_x,train_set_y = train_set
  • valid_set_x,valid_set_y = valid_set
  • test_set_x,test_set_y = test_set

请有人给我构建这个数据集的代码,以便创建我自己的数据集吗?我使用的DBN示例需要这种格式的数据,我不知道该怎么做.如果有人有任何想法如何解决这个问题,请告诉我.

这是我的代码:

from datetime import datetime
import time
import os
from pprint import pprint
import numpy as np
import gzip, cPickle
import theano.tensor as T
from theano import function


os.system("cls")

filename = "completeData.txt"


f = open(filename,"r")
X = []
Y = []

for line in f:
        line = line.strip('\n')  
        b = line.split(';')
        b[0] = float(b[0])
        b[1] = float(b[1])
        b[2] …
Run Code Online (Sandbox Code Playgroud)

python pickle mnist dbn theano

9
推荐指数
2
解决办法
2万
查看次数

Theano CUDA例外

我对theano比较新,我想在我的GPU上运行mnist示例,但我得到以下输出:

Using gpu device 0: GeForce GTX 970M (CNMeM is disabled)
Loading data...
Building model and compiling functions...
WARNING (theano.gof.compilelock):
    Overriding existing lock by dead process '9700' (I am process '10632')

DEBUG: nvcc STDOUT mod.cu
Creating library 
  C:/Users/user/AppData/Local/Theano
    /compiledir_Windows-8-6.2.9200-Intel64_Family_6_Model_71_Stepping_1_GenuineIntel-3.4.3-64
    /tmp55nlvvvo/m25b839e7715203be227800f03e7c8fe8.lib 
and object 
  C:/Users/user/AppData/Local/Theano
    /compiledir_Windows-8-6.2.9200-Intel64_Family_6_Model_71_Stepping_1_GenuineIntel-3.4.3-64
    /tmp55nlvvvo/m25b839e7715203be227800f03e7c8fe8.exp
Run Code Online (Sandbox Code Playgroud)

它不断输出DEBUG消息而不输出任何mnist.我有一个工作版的nvcc:

C:\Users\user>nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2015 NVIDIA Corporation
Built on Tue_Aug_11_14:49:10_CDT_2015
Cuda compilation tools, release 7.5, V7.5.17
Run Code Online (Sandbox Code Playgroud)

我的.theanorc档案:

[global]
floatX = float32
device = gpu0

[nvcc]
fastmath …
Run Code Online (Sandbox Code Playgroud)

python mnist theano

8
推荐指数
1
解决办法
1590
查看次数

如何为tensorflow准备我自己的数据?

我在ubuntu 14.04上安装了Tensorflow.我完成了MNIST For ML Beginners教程.我明白了.

也不,我尝试使用自己的数据.我有数据训练为T [1000] [10].标签是L [2],1或0.

我如何访问我的数据mnist.train.images

mnist deep-learning tensorflow

8
推荐指数
1
解决办法
3236
查看次数

R - 图像绘制MNIST数据集

我的数据集来自Kaggle 的MNIST

我正在尝试使用该image功能可视化说出训练集中的第一个数字.不幸的是我收到以下错误:

>image(1:28, 1:28, im, col=gray((0:255)/255))
Error in image.default(1:28, 1:28, im, col = gray((0:255)/255)) : 
'z' must be numeric or logical
Run Code Online (Sandbox Code Playgroud)

添加几个代码:

rawfile<-read.csv("D://Kaggle//MNIST//train.csv",header=T) #Reading the csv file
im<-matrix((rawfile[1,2:ncol(rawfile)]), nrow=28, ncol=28) #For the 1st Image

image(1:28, 1:28, im, col=gray((0:255)/255))

Error in image.default(1:28, 1:28, im, col = gray((0:255)/255)) : 
'z' must be numeric or logical
Run Code Online (Sandbox Code Playgroud)

r image mnist kaggle

8
推荐指数
2
解决办法
3558
查看次数

NIST和CNN的数字识别前的预处理用MNIST数据集训练

我试图通过使用NN和CNN对我自己和一些朋友写的手写数字进行分类.为了训练NN,使用MNIST数据集.问题是使用MNIST数据集训练的NN不能在我的数据集上给出令人满意的测试结果.我在Python和MATLAB上使用了一些库,具有不同的设置,如下所示.

在Python上我已经将这段代码用于设置;

  • 3层NN,输入数= 784,隐藏神经元数= 30,输出数= 10
  • 成本函数=交叉熵
  • 时代数= 30
  • 批量大小= 10
  • 学习率= 0.5

它是用MNIST训练集训练的,测试结果如下:

MNIST上的测试结果=我自己的数据集上的96%测试结果= 80%

在MATLAB上我使用了深度学习工具箱,其中包含各种设置,归一化,与上面类似,NN的最佳精度约为75%.在MATLAB上使用NN和CNN.

我试图将自己的数据集类似于MNIST.以上结果从预处理数据集中收集.以下是应用于我的数据集的预处理:

  • 每个数字单独裁剪,并通过usign bicubic插值调整为28 x 28
  • 通过MATLAB上的usign边界框,路径以MNIST中的平均值为中心
  • 背景为0,最高像素值为1,如MNIST中所示

我不知道该怎么做.仍存在一些差异,如对比度等,但对比度增强试验无法提高准确性.

这是来自MNIST和我自己的数据集的一些数字,用于直观地比较它们.

MNIST数字

我自己的数据集

正如您所看到的,存在明显的对比差异.我认为准确性问题是由于MNIST和我自己的数据集之间缺乏相似性.我该如何处理这个问题?

有一个类似的问题在这里,但他的数据集是印刷数字集合,而不是像我一样.

编辑:我还测试了我自己的数据集的二进制化版本,该数据集是在使用二进制化MNIST和默认MNIST进行训练的NN上进行的.二值化阈值为0.05.

这是分别来自MNIST数据集和我自己的数据集的矩阵形式的示例图像.他们两个都是5.

MNIST:

  Columns 1 through 10

         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0 …
Run Code Online (Sandbox Code Playgroud)

python ocr matlab image-recognition mnist

7
推荐指数
1
解决办法
8881
查看次数

为什么我们在将数据输入 tensorflow 之前将其展平?

我正在关注udacity MNIST 教程,而 MNIST 数据最初是28*28矩阵。然而,在提供该数据之前,他们将数据展平为具有 784 列的一维数组(784 = 28 * 28)

例如,原始训练集形状为 (200000, 28, 28)。
200000 行(数据)。每个数据为28*28矩阵

他们将其转换为形状为 (200000, 784) 的训练集

有人可以解释为什么他们在提供给 tensorflow 之前将数据展平吗?

mnist deep-learning tensorflow

7
推荐指数
1
解决办法
3355
查看次数

使用 pytorch 和 sklearn 对 MNIST 数据集进行交叉验证

我是 pytorch 的新手,正在尝试实现一个前馈神经网络来对 mnist 数据集进行分类。我在尝试使用交叉验证时遇到了一些问题。我的数据具有以下形状 x_train:: torch.Size([45000, 784])y_traintorch.Size([45000])

我尝试使用 sklearn 中的 KFold。

kfold =KFold(n_splits=10)

这是我的训练方法的第一部分,我将数据分成几部分:

for  train_index, test_index in kfold.split(x_train, y_train): 
        x_train_fold = x_train[train_index]
        x_test_fold = x_test[test_index]
        y_train_fold = y_train[train_index]
        y_test_fold = y_test[test_index]
        print(x_train_fold.shape)
        for epoch in range(epochs):
         ...
Run Code Online (Sandbox Code Playgroud)

y_train_fold变量的索引是正确的,它只是: [ 0 1 2 ... 4497 4498 4499],但它不是 for x_train_fold,而是[ 4500 4501 4502 ... 44997 44998 44999]。测试折叠也是如此。

对于第一次迭代,我希望变量x_train_fold是前 4500 张图片,换句话说,具有 shape torch.Size([4500, 784]),但它具有 shapetorch.Size([40500, 784])

关于如何做到这一点的任何提示?

scikit-learn cross-validation mnist pytorch k-fold

7
推荐指数
2
解决办法
1万
查看次数

改善使用 mnist 数据集训练的神经网络的真实结果

我已经使用 mnist 数据集用 keras 构建了一个神经网络,现在我正尝试将它用于实际手写数字的照片。当然,我并不期望结果是完美的,但我目前得到的结果还有很大的改进空间。

首先,我用一些用我最清晰的笔迹书写的单个数字的照片来测试它。它们是方形的,并且与 mnist 数据集中的图像具有相同的尺寸和颜色。它们保存在一个名为individual_test的文件夹中,例如:7(2)_digit.jpg

网络通常非常确定错误的结果,我会给你一个例子:

显然是 7

我得到这张图片的结果如下:

result:  3 . probabilities:  [1.9963557196245318e-10, 7.241294497362105e-07, 0.02658148668706417, 0.9726449251174927, 2.5416460047722467e-08, 2.6078915027483163e-08, 0.00019745019380934536, 4.8302300825753264e-08, 0.0005754049634560943, 2.8358477788259506e-09]
Run Code Online (Sandbox Code Playgroud)

所以网络有 97% 的把握确定这是一个 3,而这张图片并不是唯一的情况。在 38 张图片中,只有 16 张被正确识别。令我震惊的是,网络对它的结果如此确定,尽管它与正确的结果相差无几。

编辑
在为prepare_image ( img = cv2.threshold(img, 0.1, 1, cv2.THRESH_BINARY_INV)[1])添加阈值后,性能略有提高。它现在得到了 38 张图片中的 19 张正确,但对于包括上面显示的图片在内的一些图像,它仍然很确定是错误的结果。这就是我现在得到的:

result:  3 . probabilities:  [1.0909866760000497e-11, 1.1584616004256532e-06, 0.27739930152893066, 0.7221096158027649, 1.900260038212309e-08, 6.555900711191498e-08, 4.479645940591581e-05, 6.455550760620099e-07, 0.0004443934594746679, 1.0013242457418414e-09]
Run Code Online (Sandbox Code Playgroud)

所以现在只有 72% 确定它的结果更好,但仍然......



我可以做些什么来提高性能?我可以更好地准备我的图像吗?还是应该将自己的图像添加到训练数据中?如果是这样,我将如何做这样的事情?

编辑

这是上面显示的图片在应用prepare_image之后的样子:
我治疗后的照片
使用阈值后,这是同一张图片的样子:
阈值后
对比:这是mnist数据集提供的其中一张图片:
mnist 数字之一
他们看起来和我很相似。我该如何改进?
这是我的代码(包括阈值):

# import keras …
Run Code Online (Sandbox Code Playgroud)

python machine-learning mnist handwriting-recognition keras

7
推荐指数
1
解决办法
980
查看次数