我正在尝试编写一个脚本,允许我绘制一个数字图像,然后确定在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) 关于张量流网站上的MNIST教程,我进行了一项实验(要点),看看不同权重初始化对学习的影响.我注意到,根据我在流行的[Xavier,Glorot 2010]论文中所读到的内容,无论重量初始化如何,学习都很好.
不同的曲线表示w用于初始化卷积和完全连接的层的权重的不同值.请注意,所有值w做工精细,即使0.3和1.0以更低的性能结束和一些价值观培养更快-尤其是0.03和0.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) 我正在尝试使用python中的Theano库对Deep Belief Networks进行一些实验.我使用此地址中的代码:DBN完整代码.此代码使用MNIST手写数据库.此文件已处于pickle格式.它是unicked in:
在下面进一步展开:
请有人给我构建这个数据集的代码,以便创建我自己的数据集吗?我使用的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) 我对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) 我在ubuntu 14.04上安装了Tensorflow.我完成了MNIST For ML Beginners教程.我明白了.
也不,我尝试使用自己的数据.我有数据训练为T [1000] [10].标签是L [2],1或0.
我如何访问我的数据mnist.train.images?
我的数据集来自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) 我试图通过使用NN和CNN对我自己和一些朋友写的手写数字进行分类.为了训练NN,使用MNIST数据集.问题是使用MNIST数据集训练的NN不能在我的数据集上给出令人满意的测试结果.我在Python和MATLAB上使用了一些库,具有不同的设置,如下所示.
在Python上我已经将这段代码用于设置;
它是用MNIST训练集训练的,测试结果如下:
MNIST上的测试结果=我自己的数据集上的96%测试结果= 80%
在MATLAB上我使用了深度学习工具箱,其中包含各种设置,归一化,与上面类似,NN的最佳精度约为75%.在MATLAB上使用NN和CNN.
我试图将自己的数据集类似于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) 我正在关注udacity MNIST 教程,而 MNIST 数据最初是28*28矩阵。然而,在提供该数据之前,他们将数据展平为具有 784 列的一维数组(784 = 28 * 28)。
例如,原始训练集形状为 (200000, 28, 28)。
200000 行(数据)。每个数据为28*28矩阵
他们将其转换为形状为 (200000, 784) 的训练集
有人可以解释为什么他们在提供给 tensorflow 之前将数据展平吗?
我是 pytorch 的新手,正在尝试实现一个前馈神经网络来对 mnist 数据集进行分类。我在尝试使用交叉验证时遇到了一些问题。我的数据具有以下形状
x_train::
torch.Size([45000, 784])和
y_train:torch.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])
关于如何做到这一点的任何提示?
我已经使用 mnist 数据集用 keras 构建了一个神经网络,现在我正尝试将它用于实际手写数字的照片。当然,我并不期望结果是完美的,但我目前得到的结果还有很大的改进空间。
首先,我用一些用我最清晰的笔迹书写的单个数字的照片来测试它。它们是方形的,并且与 mnist 数据集中的图像具有相同的尺寸和颜色。它们保存在一个名为individual_test的文件夹中,例如:7(2)_digit.jpg。
网络通常非常确定错误的结果,我会给你一个例子:
我得到这张图片的结果如下:
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数据集提供的其中一张图片:
他们看起来和我很相似。我该如何改进?
这是我的代码(包括阈值):
# import keras …Run Code Online (Sandbox Code Playgroud)