Removing convolution placeholders.
This commit is contained in:
parent
89beb62fce
commit
8c98867cfa
126
mlp/conv.py
126
mlp/conv.py
@ -1,126 +0,0 @@
|
||||
|
||||
# Machine Learning Practical (INFR11119),
|
||||
# Pawel Swietojanski, University of Edinburgh
|
||||
|
||||
|
||||
import numpy
|
||||
import logging
|
||||
from mlp.layers import Layer
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
"""
|
||||
You have been given some very initial skeleton below. Feel free to build on top of it and/or
|
||||
modify it according to your needs. Just notice, you can factor out the convolution code out of
|
||||
the layer code, and just pass (possibly) different conv implementations for each of the stages
|
||||
in the model where you are expected to apply the convolutional operator. This will allow you to
|
||||
keep the layer implementation independent of conv operator implementation, and you can easily
|
||||
swap it layer, for example, for more efficient implementation if you came up with one, etc.
|
||||
"""
|
||||
|
||||
def my1_conv2d(image, kernels, strides=(1, 1)):
|
||||
"""
|
||||
Implements a 2d valid convolution of kernels with the image
|
||||
Note: filer means the same as kernel and convolution (correlation) of those with the input space
|
||||
produces feature maps (sometimes refereed to also as receptive fields). Also note, that
|
||||
feature maps are synonyms here to channels, and as such num_inp_channels == num_inp_feat_maps
|
||||
:param image: 4D tensor of sizes (batch_size, num_input_channels, img_shape_x, img_shape_y)
|
||||
:param filters: 4D tensor of filters of size (num_inp_feat_maps, num_out_feat_maps, kernel_shape_x, kernel_shape_y)
|
||||
:param strides: a tuple (stride_x, stride_y), specifying the shift of the kernels in x and y dimensions
|
||||
:return: 4D tensor of size (batch_size, num_out_feature_maps, feature_map_shape_x, feature_map_shape_y)
|
||||
"""
|
||||
raise NotImplementedError('Write me!')
|
||||
|
||||
|
||||
class ConvLinear(Layer):
|
||||
def __init__(self,
|
||||
num_inp_feat_maps,
|
||||
num_out_feat_maps,
|
||||
image_shape=(28, 28),
|
||||
kernel_shape=(5, 5),
|
||||
stride=(1, 1),
|
||||
irange=0.2,
|
||||
rng=None,
|
||||
conv_fwd=my1_conv2d,
|
||||
conv_bck=my1_conv2d,
|
||||
conv_grad=my1_conv2d):
|
||||
"""
|
||||
|
||||
:param num_inp_feat_maps: int, a number of input feature maps (channels)
|
||||
:param num_out_feat_maps: int, a number of output feature maps (channels)
|
||||
:param image_shape: tuple, a shape of the image
|
||||
:param kernel_shape: tuple, a shape of the kernel
|
||||
:param stride: tuple, shift of kernels in both dimensions
|
||||
:param irange: float, initial range of the parameters
|
||||
:param rng: RandomState object, random number generator
|
||||
:param conv_fwd: handle to a convolution function used in fwd-prop
|
||||
:param conv_bck: handle to a convolution function used in backward-prop
|
||||
:param conv_grad: handle to a convolution function used in pgrads
|
||||
:return:
|
||||
"""
|
||||
|
||||
super(ConvLinear, self).__init__(rng=rng)
|
||||
|
||||
raise NotImplementedError()
|
||||
|
||||
def fprop(self, inputs):
|
||||
raise NotImplementedError()
|
||||
|
||||
def bprop(self, h, igrads):
|
||||
raise NotImplementedError()
|
||||
|
||||
def bprop_cost(self, h, igrads, cost):
|
||||
raise NotImplementedError('ConvLinear.bprop_cost method not implemented')
|
||||
|
||||
def pgrads(self, inputs, deltas, l1_weight=0, l2_weight=0):
|
||||
raise NotImplementedError()
|
||||
|
||||
def get_params(self):
|
||||
raise NotImplementedError()
|
||||
|
||||
def set_params(self, params):
|
||||
raise NotImplementedError()
|
||||
|
||||
def get_name(self):
|
||||
return 'convlinear'
|
||||
|
||||
#you can derive here particular non-linear implementations:
|
||||
#class ConvSigmoid(ConvLinear):
|
||||
#...
|
||||
|
||||
|
||||
class ConvMaxPool2D(Layer):
|
||||
def __init__(self,
|
||||
num_feat_maps,
|
||||
conv_shape,
|
||||
pool_shape=(2, 2),
|
||||
pool_stride=(2, 2)):
|
||||
"""
|
||||
|
||||
:param conv_shape: tuple, a shape of the lower convolutional feature maps output
|
||||
:param pool_shape: tuple, a shape of pooling operator
|
||||
:param pool_stride: tuple, a strides for pooling operator
|
||||
:return:
|
||||
"""
|
||||
|
||||
super(ConvMaxPool2D, self).__init__(rng=None)
|
||||
raise NotImplementedError()
|
||||
|
||||
def fprop(self, inputs):
|
||||
raise NotImplementedError()
|
||||
|
||||
def bprop(self, h, igrads):
|
||||
raise NotImplementedError()
|
||||
|
||||
def get_params(self):
|
||||
return []
|
||||
|
||||
def pgrads(self, inputs, deltas, **kwargs):
|
||||
return []
|
||||
|
||||
def set_params(self, params):
|
||||
pass
|
||||
|
||||
def get_name(self):
|
||||
return 'convmaxpool2d'
|
Loading…
Reference in New Issue
Block a user