class_docstr: Mini-batch Gradient Descent algorithm.
  
  Parameters
  ----------
  batch_size : int or None
      Set up min-batch size. The ``None`` value will ensure that all data
      samples will be propagated through the network at once.
      Defaults to ``128``.
  
  {BaseOptimizer.Parameters}
  
  Attributes
  ----------
  {BaseOptimizer.Attributes}
  
  Methods
  -------
  {BaseOptimizer.Methods}
  
  Examples
  --------
  >>> import numpy as np
  >>> from neupy import algorithms
  >>> from neupy.algorithms import *
  >>>
  >>> x_train = np.array([[1, 2], [3, 4]])
  >>> y_train = np.array([[1], [0]])
  >>>
  >>> network = Input(2) >> Sigmoid(3) >> Sigmoid(1)
  >>> optimizer = algorithms.GradientDescent(network, batch_size=1)
  >>> optimizer.train(x_train, y_train)
code: def init_train_updates(self):
      optimizer = tf.train.GradientDescentOptimizer(
          learning_rate=self.step,
      )
      self.functions.optimizer = optimizer
      return [optimizer.minimize(self.variables.loss)]
  
imports: from __future__ import division
  import time
  import numpy
  import tensorflow
  from neupy import layers
  from neupy.core.properties import FunctionWithOptionsProperty, ScalarVariableProperty, IntProperty, Property
  from neupy.utils import AttributeKeyDict, format_data, as_tuple, iters, tf_utils
  from neupy.algorithms.gd import objectives
  from neupy.exceptions import InvalidConnection
  from neupy.algorithms.base import BaseNetwork
label_desc: Use image node_id 1 for calling the GradientDescent obj's underlying member method code with example usage: obj.init_train_updates() and returns: list