44 int32_t input_width, int32_t input_height,
45 int32_t radius_x, int32_t radius_y,
46 int32_t stride_x, int32_t stride_y,
50 m_input_width(input_width), m_input_height(input_height),
51 m_radius_x(radius_x), m_radius_y(radius_y),
52 m_stride_x(stride_x), m_stride_y(stride_y),
54 m_activation_function(function),
55 m_autoencoder_position(autoencoder_position)
83 int32_t batch_size = activations.
num_cols;
88 for (int32_t j=0; j<batch_size; j++)
94 int32_t weights_index_offset = 1;
95 for (int32_t l=0; l<input_indices.
vlen; l++)
102 for (int32_t m=0; m<num_maps; m++)
118 for (int32_t j=0; j<batch_size; j++)
125 for (int32_t j=0; j<batch_size; j++)
127 CMath::max<float64_t>(0, activations(i+
m_row_offset,j));
139 int32_t batch_size = activation_gradients.
num_cols;
145 for (int32_t j=0; j<batch_size; j++)
156 for (int32_t j=0; j<batch_size; j++)
163 for (int32_t j=0; j<batch_size; j++)
164 bias_gradient += activation_gradients(i+
m_row_offset,j);
166 parameter_gradients[0] = bias_gradient;
168 int32_t weights_index_offset = 1;
169 for (int32_t l=0; l<input_indices.
vlen; l++)
176 for (int32_t m=0; m<num_maps; m++)
199 int32_t pooling_width, int32_t pooling_height,
209 result_row_offset /= (pooling_width*pooling_height);
210 result_width /= pooling_width;
211 result_height /= pooling_height;
214 for (int32_t i=0; i<pooled_activations.
num_cols; i++)
221 pooled_activations.
matrix+i*pooled_activations.
num_rows + result_row_offset,
222 result_height, result_width,
false);
226 result_height, result_width,
false);
241 for (int32_t x1=x; x1<x+pooling_width; x1++)
243 for (int32_t y1=y; y1<y+pooling_height; y1++)
245 if (image(y1,x1) > max)
254 result(y/pooling_height, x/pooling_width) =
max;
255 indices(y/pooling_height, x/pooling_width) = max_index;
260 indices(y, x) = max_index;
273 int32_t inputs_row_offset,
274 int32_t outputs_row_offset)
276 for (int32_t i=0; i<outputs.
num_cols; i++)
293 float64_t sum = reset_output ? 0 : result(res_y,res_x);
302 weights(y1-y+m_radius_y,x1-x+m_radius_x)*image(y1,x1);
305 weights(m_radius_y-y1+y,m_radius_x-x1+x)*image(y1,x1);
309 result(res_y,res_x) = sum;
319 int32_t inputs_row_offset,
320 int32_t local_gradients_row_offset)
322 weight_gradients.
zero();
323 for (int32_t i=0; i<local_gradients.
num_cols; i++)
344 weight_gradients(m_radius_y-y1+y,m_radius_x-x1+x) +=
347 weight_gradients(m_radius_y-y1+y,m_radius_x-x1+x) +=
348 LG_image(y,x)*image(y1,x1);
int32_t m_input_num_neurons
void convolve(SGMatrix< float64_t > inputs, SGMatrix< float64_t > weights, SGMatrix< float64_t > outputs, bool flip, bool reset_output, int32_t inputs_row_offset, int32_t outputs_row_offset)
virtual SGMatrix< float64_t > get_activation_gradients()
ENLAutoencoderPosition m_autoencoder_position
virtual int32_t get_num_neurons()
Base class for neural network layers.
virtual SGMatrix< float64_t > get_activations()
EConvMapActivationFunction m_activation_function
CSGObject * element(int32_t idx1, int32_t idx2=0, int32_t idx3=0)
void compute_activations(SGVector< float64_t > parameters, CDynamicObjectArray *layers, SGVector< int32_t > input_indices, SGMatrix< float64_t > activations)
Dynamic array class for CSGObject pointers that creates an array that can be used like a list or an a...
int32_t m_output_num_neurons
all of classes and functions are contained in the shogun namespace
static float64_t exp(float64_t x)
Matrix::Scalar max(Matrix m)
EConvMapActivationFunction
Determines the activation function for neurons in a convolutional feature map.
void compute_gradients(SGVector< float64_t > parameters, SGMatrix< float64_t > activations, SGMatrix< float64_t > activation_gradients, CDynamicObjectArray *layers, SGVector< int32_t > input_indices, SGVector< float64_t > parameter_gradients)
void set_const(T const_elem)
void compute_weight_gradients(SGMatrix< float64_t > inputs, SGMatrix< float64_t > local_gradients, SGMatrix< float64_t > weight_gradients, int32_t inputs_row_offset, int32_t local_gradients_row_offset)
void pool_activations(SGMatrix< float64_t > activations, int32_t pooling_width, int32_t pooling_height, SGMatrix< float64_t > pooled_activations, SGMatrix< float64_t > max_indices)
CConvolutionalFeatureMap(int32_t input_width, int32_t input_height, int32_t radius_x, int32_t radius_y, int32_t stride_x=1, int32_t stride_y=1, int32_t index=0, EConvMapActivationFunction function=CMAF_IDENTITY, ENLAutoencoderPosition autoencoder_position=NLAP_NONE)