# test_iterator = None ############################# rng = sparnn.utils.quick_npy_rng() theano_rng = sparnn.utils.quick_theano_rng(rng) ############################# interface layer param = { "id": "ucf101-flow-vgg16-fc7", "use_mask": True, "input_ndim": 3, "output_ndim": 2, "output_data_type": "int64" } interface_layer = InterfaceLayer(param) x = interface_layer.input mask = interface_layer.mask y = interface_layer.output timesteps = x.shape[0] minibatch_size = x.shape[1] feature_dim = 4096 hidden_dim = 512 out_dim = 1024 actions = 101 data_dim = (feature_dim, ) logger.info("Data Dim:" + str(data_dim))
def __init__(self, param, config): self.param = param self.config = config # 2x2 小碎片是2*2的小图片(叫做patch,或者掩模) feature_num = config['patch_size'] * config['patch_size'] row_num = int(config['size'][0] / config['patch_size']) col_num = int(config['size'][1] / config['patch_size']) data_dim = (feature_num, row_num, col_num) kernel_size = config['kernel_size'] kernel_num = config['kernel_num'] logger.debug('build model:' + str(feature_num) + ' ' + str(data_dim) + ' ' + str(kernel_size) + ' ' + str(kernel_num)) param = { "id": "DeepWeather-interface", "use_input_mask": False, "input_ndim": 5, "output_ndim": 5 } self.interface_layer = InterfaceLayer(param) # interface_layer.input: (1, 100, 100), reshape_input: (16, 25, 25), data_dim: (16, 25, 25) self.reshape_input = quick_reshape_patch(self.interface_layer.input, config['patch_size']) self.reshape_output = quick_reshape_patch(self.interface_layer.output, config['patch_size']) minibatch_size = self.interface_layer.input.shape[1] self.middle_layers = [] param = { "id": 0, "rng": rng, "theano_rng": theano_rng, "dim_in": data_dim, "dim_out": (kernel_num[0], row_num, col_num), "input_receptive_field": (kernel_size, kernel_size), "transition_receptive_field": (kernel_size, kernel_size), "minibatch_size": minibatch_size, "input": self.reshape_input, "n_steps": config['input_seq_length'] } self.middle_layers.append(ConvLSTMLayer(param)) param = { "id": 1, "rng": rng, "theano_rng": theano_rng, "dim_in": (kernel_num[0], row_num, col_num), "dim_out": (kernel_num[1], row_num, col_num), "input_receptive_field": (kernel_size, kernel_size), "transition_receptive_field": (kernel_size, kernel_size), "minibatch_size": minibatch_size, "input": self.middle_layers[0].output, "n_steps": config['input_seq_length'] } self.middle_layers.append(ConvLSTMLayer(param)) param = { "id": 2, "rng": rng, "theano_rng": theano_rng, "dim_in": (kernel_num[1], row_num, col_num), "dim_out": (kernel_num[2], row_num, col_num), "input_receptive_field": (kernel_size, kernel_size), "transition_receptive_field": (kernel_size, kernel_size), "minibatch_size": minibatch_size, "input": self.middle_layers[1].output, "n_steps": config['input_seq_length'] } self.middle_layers.append(ConvLSTMLayer(param)) param = { "id": 3, "rng": rng, "theano_rng": theano_rng, "dim_in": data_dim, "dim_out": (kernel_num[0], row_num, col_num), "input_receptive_field": (kernel_size, kernel_size), "transition_receptive_field": (kernel_size, kernel_size), "init_hidden_state": self.middle_layers[0].output[-1], "init_cell_state": self.middle_layers[0].cell_output[-1], "minibatch_size": minibatch_size, "input": None, "n_steps": config['output_seq_length'] - 1 } self.middle_layers.append(ConvLSTMLayer(param)) param = { "id": 4, "rng": rng, "theano_rng": theano_rng, "dim_in": (kernel_num[0], row_num, col_num), "dim_out": (kernel_num[1], row_num, col_num), "input_receptive_field": (kernel_size, kernel_size), "transition_receptive_field": (kernel_size, kernel_size), "init_hidden_state": self.middle_layers[1].output[-1], "init_cell_state": self.middle_layers[1].cell_output[-1], "minibatch_size": minibatch_size, "input": self.middle_layers[3].output, "n_steps": config['output_seq_length'] - 1 } self.middle_layers.append(ConvLSTMLayer(param)) param = { "id": 5, "rng": rng, "theano_rng": theano_rng, "dim_in": (kernel_num[1], row_num, col_num), "dim_out": (kernel_num[2], row_num, col_num), "input_receptive_field": (kernel_size, kernel_size), "transition_receptive_field": (kernel_size, kernel_size), "init_hidden_state": self.middle_layers[2].output[-1], "init_cell_state": self.middle_layers[2].cell_output[-1], "minibatch_size": minibatch_size, "input": self.middle_layers[4].output, "n_steps": config['output_seq_length'] - 1 } self.middle_layers.append(ConvLSTMLayer(param)) param = { "id": 6, "rng": rng, "theano_rng": theano_rng, "dim_in": (kernel_num[0] + kernel_num[1] + kernel_num[2], row_num, col_num), "dim_out": data_dim, "input_receptive_field": (1, 1), "input_stride": (1, 1), "activation": "sigmoid", "minibatch_size": minibatch_size, "conv_type": "same", "input": TT.concatenate([ TT.concatenate([ self.middle_layers[0].output[-1:], self.middle_layers[1].output[-1:], self.middle_layers[2].output[-1:] ], axis=2), TT.concatenate([ self.middle_layers[3].output, self.middle_layers[4].output, self.middle_layers[5].output ], axis=2) ]) } self.middle_layers.append(ConvForwardLayer(param)) # dim_in = (16, 25, 25) param = { "id": "cost", "rng": rng, "theano_rng": theano_rng, # "cost_func": "BinaryCrossEntropy", "cost_func": config['cost_func'], "dim_in": data_dim, "dim_out": (1, 1, 1), "minibatch_size": minibatch_size, "input": self.middle_layers[-1].output, "target": self.reshape_output } self.cost_layer = ElementwiseCostLayer(param) self.outputs = [{ "name": "prediction", "value": self.middle_layers[-1].output }] model_param = { 'interface_layer': self.interface_layer, 'middle_layers': self.middle_layers, 'cost_layer': self.cost_layer, #'combine_interface_layer': self.combine_interface_layer, 'outputs': self.outputs, 'errors': None, 'name': "DeepWeatherModel-test", 'problem_type': "regression" } super(FactorWeatherModel, self).__init__(model_param)