今天,我将与您分享python运行的Minst数据库需要多长时间。它也将解释它。如果您可以解决您现在面临的问题,请不要忘记注意此网站。让我们现在开始!
本文目录清单:
1. Python培训MNIST多长时间?2. Python如何将MNIST数据集用于数字识别?3。2.建立神经网络模型培训MNIST手写数字数据集问题和解决方案实际上是Python读取Binnary文件的方式
MNIST的结构如下,选择的火车图像
训练集图像文件(火车图像-IDX3-UBYTE):
[offset] [type] [value] [描述]
0000 32位整数0x00000803(2051)魔术号码
0004 32位整数60000图像数量
0008 32位整数28行数
0012 32位整数28列数
0016未签名字节??像素
0017未签名字节??像素
.........
xxxx unsigned字节??像素
也就是说,我们必须阅读4 32位整数
我尝试了很多方法,我感到最方便,至少对我来说
struct.unpack_from()
文件名='train-images.idx3-ubyte'
binfile = open(文件名,'rb')
buf = binfile.read()
首先使用二进制方法读取文件
索引= 0
魔术,数字,numrows,numcolumns = struct.unpack_from('iiii',buf,index)
索引 += struct.calcsize('iiii')
然后使用strc.unpack_from
“ iiii”是指读取4个未内置的INT32,具有大端方法
然后阅读图片测试是否成功阅读
im = struct.unpack_from('784b',buf,index)
索引 += struct.calcsize('784b')
im = np.array(im)
im = im.Reshape(28,28)
无花果= plt.figure()
plotWindow =图。Add_subplot(111)
plt.imshow(im,cmap ='灰色')
plt.show()
“ 784b”是指用大端方法读取784个未签名字节
完整的代码如下
导入numpy作为NP
导入结构
导入matplotlib.pyplot作为PLT
文件名='train-images.idx3-ubyte'
binfile = open(文件名,'rb')
buf = binfile.read()
索引= 0
魔术,数字,numrows,numcolumns = struct.unpack_from('iiii',buf,index)
索引 += struct.calcsize('iiii')
im = struct.unpack_from('784b',buf,index)
索引 += struct.calcsize('784b')
im = np.array(im)
im = im.Reshape(28,28)
无花果= plt.figure()
plotWindow =图。Add_subplot(111)
plt.imshow(im,cmap ='灰色')
plt.show()
784b',buf,index)x0dx0aindex+= struct.calcsize('784b')x0dx0ax0ax0aim = np.array(im)x0dx0aim =成功,所以我只读了一张图片
批处理输入后,如何通过Numpy矩阵计算计算每个授权的梯度以提高计算速度
def BackProp(self,x,y):#x是一个多维矩阵。each是x value.y是一个多维矩阵。east。east是y值。
batch_num = X.Shape [1]
#print(X.Shape)
#print(Y.Shape)
“”“”创建两个变量来存储与所有B值和所有W值相对应的梯度值。初始化为0.nabla_b to列表,该列表与Biasees的形状完全相同。nabla_w是具有权重形状和形状的列表。完全一致。
”“”
nabla_b = [np.zeros(b.shape)for biase.biases]
nabla_w = [np.zeros(w. shape)for w in self.peighights]
#feedforward
“”“激活,用于在计算过程中,即一个值的最终输出值和输出层的最终输出值。该值是为每个B和W的梯子记录的,用于以后使用BP算法。
”“”
激活= x #x是该批次中由多个X组成的矩阵。
激活= [x]#列表要粘贴所有激活,一层逐层
“”“” ZS,用于正面 - 到计算过程中所有中间层和输出层的线性输出值,即z值。该值是为每个B和W的梯子记录的,用于以后使用BP算法。
”“”
zs = []#列表要粘贴所有z向量,逐层,zs的每个元素都是由z组成的矩阵,该矩阵与对应于批处理的x相对应。
”“”
通过积极的计算,将计算并存储中间层和输出层的所有Z值以及一个值。对于下一个梯度使用。
”“”
对于b,w在zip中(self.biases,self.proce):
#print(W.Shape)
#print(np.dot(w,active).shape)
#print(B.形)
z = np.dot(w,active)+b #z是由x组成的矩阵。
zs.append(z)
活动= sigmoid(z)
Activations.Append(激活)
”“”
通过使用BP算法来求解每个训练参数。这是重量更新过程的关键,可以计算以下部分。
”“”
#向后传球
#找到输出层的增量值
delta =((激活[-1] -y) * sigmoid_prime(zs [-1])
nabla_b [-1] = delta.mean(axis = 1).Reshape(-1,1)
nabla_w [-1] = np.dot(delta,activations [-2] .transpose())/batch_num
#请注意,下面的循环中的变量L有点使用
#与本书第2章中的符号不同。这里,
#l = 1表示神经元的最后一层,l = 2是
#第二层层,依此类推。这是对
#书中的方案,在此处利用事实
#Python可以在列表中使用负索引。
对于范围内的L(2,self.num_layers):
z = zs [-l]
sp = sigmoid_prime(z)
delta =(np.dot(self.peage [-l+1] .transpose(),delta) * sp)
nabla_b [-l] = delta.mean(axis = 1).Reshape(-1,1)
nabla_w [-l] = np.dot(delta,activations [-l-1] .transpose())/batch_num
返回(nabla_b,nabla_w)
##梯度计算后,如何更新值
def update_mini_batch(self,mini_batch,eta):
“”“通过申请更新网络的权重和偏见
使用反向传播到单个迷你批次的梯度设计。
“ mini_batch”是元组列表(x,y)````eT'''
是学习率。“”“”“”“”
“”“初始化变量,存储不同的训练参数。
”“”
nabla_b = [np.zeros(b.shape)for biase.biases]
nabla_w = [np.zeros(w. shape)for w in self.peighights]
“”“”循环以批量获取每个数据,获得每个训练参数的差分分数,并在添加后获得训练参数的差分总和。
”“”
x_batch =无
y_batch =无
对于x,y在mini_batch中:
如果(x_batch无):
x_batch = x
别的:
x_batch = np.append(x_batch,x,axis = 1)
如果(y_batch无):
y_batch = y
别的:
y_batch = np.append(y_batch,y,axis = 1)
delta_nabla_b,delta_nabla_w = self.backprop(x_batch,y_batch)
nabla_b = [nb+dnb for nb,dnb in zip(nabla_b,delta_nabla_b)]
nabla_w = [nw+dnw for nw,dnw in zip(nabla_w,delta_nabla_w)]]
“”“”“使用每个训练参数的平均差异和步进的乘积来更新每个训练参数
”“”
self.weights = [w-eta*nw
对于w,nw中的nw(self.peighights,nabla_w)]]]]
self.biases = [b-eta*nb
对于b,nb在zip中(self.biases,nabla_b)]]]]
让我们谈谈Python运行Minst数据库多长时间。感谢您阅读本网站的内容。有关python运行Minst数据库的更多信息,请不要忘记在此站点上找到它。