Source code for proton_decay_study.models.kevnet

from keras.layers import Input, Dropout, Dense, Flatten
from keras.layers.convolutional import MaxPooling3D, Conv3D
from keras.models import Model

import logging


[docs]class Kevnet(Model): logger = logging.getLogger('pdk.kevnet') def __init__(self, generator): self.generator = generator layer = self.assemble(generator) super(Kevnet, self).__init__(self._input, layer) self.logger.info("Compiling Model") self.compile(loss='mean_squared_error', optimizer='sgd', metrics=['accuracy'])
[docs] def assemble(self, generator): self.logger.info("Assembling Model") self._input = Input(shape=generator.output) self.logger.info(self._input) self.logger.info(self._input.shape) layer = Conv3D(32, (1, 5, 5), strides=(1, 4, 4), activation='relu', padding='same', data_format='channels_first', name='block1_conv1')(self._input) self.logger.info(layer.shape) layer = MaxPooling3D((1, 5, 3), strides=(1, 4, 2), data_format='channels_first', name='block1_pool')(layer) self.logger.info(layer.shape) layer = Conv3D(64, (1, 3, 3), strides=(1, 2, 2), activation='relu', padding='same', data_format='channels_first', name='block2_conv1')(layer) self.logger.info(layer.shape) layer = MaxPooling3D((1, 3, 3), strides=(1, 2, 2), data_format='channels_first', name='block2_pool')(layer) self.logger.info(layer.shape) layer = Conv3D(128, (3, 3, 3), strides=(3, 2, 2), activation='relu', padding='same', data_format='channels_first', name='block3_conv1')(layer) self.logger.info(layer.shape) layer = MaxPooling3D((1, 3, 3), strides=(1, 2, 2), data_format='channels_first', name='block3_pool')(layer) self.logger.info(layer.shape) layer = Conv3D(256, (1, 3, 3), strides=(1, 2, 2), activation='relu', padding='same', data_format='channels_first', name='block4_conv1')(layer) self.logger.info(layer.shape) layer = MaxPooling3D((1, 3, 3), strides=(1, 2, 2), data_format='channels_first', name='block4_pool')(layer) self.logger.info(layer.shape) layer = Conv3D(512, (1, 3, 3), strides=(1, 2, 2), activation='relu', padding='same', data_format='channels_first', name='block5_conv1')(layer) self.logger.info(layer.shape) layer = MaxPooling3D((1, 3, 3), strides=(1, 2, 2), data_format='channels_first', name='block5_pool')(layer) self.logger.info(layer.shape) layer = Dropout(0.1)(layer) # Classification block layer = Flatten(name='flatten')(layer) layer = Dropout(0.01)(layer) layer = Dense(1024, activation='relu', name='fc1')(layer) layer = Dropout(0.01)(layer) layer = Dense(generator.input, activation='softmax', name='predictions')(layer) self.logger.info(layer.shape)
return layer