美文网首页
[代码+浅析]批梯度下降法batch gradient desc

[代码+浅析]批梯度下降法batch gradient desc

作者: 霞客环肥 | 来源:发表于2019-05-27 18:10 被阅读0次

    我们在训练神经网络模型时,最常用的就是梯度下降,接下俩主要介绍下mini-batch gradient descent。关于Batch gradient descent(批梯度下降,BGD)就不细说了(一次迭代训练所有样本),因为这个大家都很熟悉,通常接触梯队下降后用的都是这个。这里主要介绍Mini-batch gradient descent和stochastic gradient descent(SGD)以及对比下Batch gradient descent、mini-batch gradient descent和stochastic gradient descent的效果。

    1. Batch gradient descent

    Batch gradient descent 就是一次迭代训练所有样本,就这样不停的迭代。

    1. stochastic gradient descent

    为了加快收敛速度,并且解决大数据量无法一次性塞入内存(显存)的问题,stochastic gradient descent(SGD)就被提出来了,SGD的思想是每次只训练一个样本去更新参数。

    1. Mini-batch gradient descent

    mini-batch gradient descent 是batch gradient descent和stochastic gradient descent的折中方案,就是mini-batch gradient descent每次用一部分样本来更新参数。因此,若batch\_size = 1则变成了SGD,若batch\_size = m则变成了batch gradient descent。

    batch\_size通常设置为2的幂次方,通常设置2, 4, 8, 16, 32, 64, 128, 256, 512(很少设置大于512)。因为设置成2的幂次方,更有利于GPU加速。 现在深度学习中,基本上都是用 mini-batch gradient descent,(在深度学习中,很多直接把mini-batch gradient descent(a.k.a stochastic mini-batch gradient descent)简称为SGD,所以当你看到深度学习中的SGD,一般指的就是mini-batch gradient descent)。

    接下来,进入代码部分。

    def create_mini_batches(X, Y, mini_batch_size=64, seed=0):
          """
          X--输入数据, shape = (m, H, W, C)
          Y--真实值, shape = (m, n_y)
          
          返回:
          mini_batches--同步列表(mini_batch_X, mini_batch_Y)
          """
          m = X.shape[0]
          mini_batches = []
          np.random.seed(seed)
    
          #Step1: Shuffle (X, Y)
          permutation = list(np.random.permutation(m))
          shuffled_X = X[permutation, :, :, :]
          shuffled_Y = Y[permutation, :]
    
          #Step2: Partition
          num_complete_minibatches = math.floor(m/mini_batch_size)
          for k in range(0, num_complete_minibatches):
                mini_batch_X = shuffled_X[k * mini_batch_size : k * mini_batch_size + mini_batch_size,:,:,:]
                mini_batch_Y = shuffled_Y[k * mini_batch_size : k * mini_batch_size + mini_batch_size,:]
                mini_batch = (mini_batch_X, mini_batch_Y)
                mini_batches.append(mini_batch)
    
          if m%mini_batch_size != 0:
                mini_batch_X = shuffled_X[num_complete_minibatches * mini_batch_size : m,:,:,:]
                mini_batch_Y = shuffled_Y[num_complete_minibatches * mini_batch_size : m,:]
                mini_batch = (mini_batch_X, mini_batch_Y)
                mini_batches.append(mini_batch)
    
          return mini_batches

    相关文章

      网友评论

          本文标题:[代码+浅析]批梯度下降法batch gradient desc

          本文链接:https://www.haomeiwen.com/subject/drcktctx.html