neural networks and deep learning """given list of inputsoutputs will produce list of length num_outputs nn is the neural network this layer is part of num outputs is the number of outputs for this layer ""self nn nn self num_inputs nn num_outputs output of nn is the input to this layer if num_outputsself num_outputs num_outputs elseself num_outputs nn num_outputs same as the inputs def output_values(self,input_valuestraining=false)"""return the outputs for this layer for the given input values input_values is list of the inputs to this layer (of length num_inputsreturns list of length self num_outputs it can act differently when training and when predicting ""raise notimplementederror("output_values"abstract method def backprop(self,errors)"""backpropagate the errors on the outputs errors is list of errors for the outputs (of length self num_outputsreturns the errors for the inputs to this layer (of length self num_inputs you can assume that this is only called after corresponding output_valueswhich can remember information information required for the back-propagation ""raise notimplementederror("backprop"abstract method def update(self)"""updates parameters after batch overridden by layers that have parameters ""pass linear layer maintains an array of weights self weights[ ][iis the weight between input and output is added to the end of the inputs the default initialization is the glorot uniform initializer [glorot and bengio ]which is the default in keras an alternative is to provide limitin which case the values are selected uniformly in the range [-limitlimitkeras treats the bias separatelyand defaults to zero learnnn py -(continued class linear_complete_layer(layer)version june