def __build_model(self): self.price_pred = Input((self.number_of_assets, )) self.prev_weights = Input((self.number_of_assets, )) price_pred_reshaped = Reshape( (self.number_of_assets, 1, 1))(self.price_pred) prev_weights_reshaped = Reshape( (self.number_of_assets, 1, 1))(self.prev_weights) network = Concatenate(axis=2)( [price_pred_reshaped, prev_weights_reshaped]) network = Conv2D(16, (1, 2), activation='relu', kernel_initializer='VarianceScaling')(network) network = Flatten()(network) network = Dense(network.get_shape()[1], 'relu', kernel_initializer='VarianceScaling')(network) new_weights = Dense(self.number_of_assets, 'linear', kernel_initializer='VarianceScaling')(network) self.model = tf.keras.models.Model( inputs=[self.price_pred, self.prev_weights], outputs=new_weights) self.model.compile(optimizer='adam', loss=self.__get_loss_function())
def bn_feature_net_skip_2D(receptive_field=61, input_shape=(256, 256, 1), inputs=None, fgbg_model=None, n_skips=2, last_only=True, norm_method='std', padding_mode='reflect', **kwargs): if K.image_data_format() == 'channels_first': channel_axis = 1 else: channel_axis = -1 inputs = Input(shape=input_shape) img = ImageNormalization2D(norm_method=norm_method, filter_size=receptive_field)(inputs) models = [] model_outputs = [] if fgbg_model is not None: for layer in fgbg_model.layers: layer.trainable = False models.append(fgbg_model) fgbg_output = fgbg_model(inputs) if isinstance(fgbg_output, list): fgbg_output = fgbg_output[-1] model_outputs.append(fgbg_output) for _ in range(n_skips + 1): if model_outputs: model_input = Concatenate(axis=channel_axis)( [img, model_outputs[-1]]) else: model_input = img new_input_shape = model_input.get_shape().as_list()[1:] models.append( bn_feature_net_2D(receptive_field=receptive_field, input_shape=new_input_shape, norm_method=None, dilated=True, padding=True, padding_mode=padding_mode, **kwargs)) model_outputs.append(models[-1](model_input)) if last_only: model = Model(inputs=inputs, outputs=model_outputs[-1]) else: if fgbg_model is None: model = Model(inputs=inputs, outputs=model_outputs) else: model = Model(inputs=inputs, outputs=model_outputs[1:]) return model
def bn_feature_net_skip_3D(receptive_field=61, input_shape=(5, 256, 256, 1), fgbg_model=None, last_only=True, n_skips=2, norm_method='std', padding_mode='reflect', **kwargs): """Creates a 3D featurenet with skip-connections. Args: receptive_field (int): the receptive field of the neural network. input_shape (tuple): Create input tensor with this shape. fgbg_model (tensorflow.keras.Model): Concatenate output of this model with the inputs as a skip-connection. last_only (bool): Model will only output the final prediction, and not return any of the underlying model predictions. n_skips (int): The number of skip-connections norm_method (str): The type of ImageNormalization to use padding_mode (str): Type of padding, one of 'reflect' or 'zero' kwargs (dict): Other model options defined in bn_feature_net_3D Returns: tensorflow.keras.Model: 3D FeatureNet with skip-connections """ channel_axis = 1 if K.image_data_format() == 'channels_first' else -1 inputs = Input(shape=input_shape) img = ImageNormalization3D(norm_method=norm_method, filter_size=receptive_field)(inputs) models = [] model_outputs = [] if fgbg_model is not None: for layer in fgbg_model.layers: layer.trainable = False models.append(fgbg_model) fgbg_output = fgbg_model(inputs) if isinstance(fgbg_output, list): fgbg_output = fgbg_output[-1] model_outputs.append(fgbg_output) for _ in range(n_skips + 1): if model_outputs: model_input = Concatenate(axis=channel_axis)( [img, model_outputs[-1]]) else: model_input = img new_input_shape = model_input.get_shape().as_list()[1:] models.append( bn_feature_net_3D(receptive_field=receptive_field, input_shape=new_input_shape, norm_method=None, dilated=True, padding=True, padding_mode=padding_mode, **kwargs)) model_outputs.append(models[-1](model_input)) if last_only: model = Model(inputs=inputs, outputs=model_outputs[-1]) elif fgbg_model is None: model = Model(inputs=inputs, outputs=model_outputs) else: model = Model(inputs=inputs, outputs=model_outputs[1:]) return model