当前位置: 首页 > 网络应用技术

Python运行Minst数据库多长时间?

时间:2023-03-08 00:50:52 网络应用技术

  今天,我将与您分享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数据库的更多信息,请不要忘记在此站点上找到它。