def _preprocess_parameters_for_sampling(self, **parameters): parameters, number_samples, number_datapoints = broadcast_parent_values( parameters) reshaped_parameters, tensor_shape = self._preproces_vector_input( parameters, self.vector_parameters) shape = tuple([number_samples, number_datapoints] + tensor_shape) return reshaped_parameters, shape
def _preprocess_parameters_for_log_prob(self, x, **parameters): parameters_and_data = parameters parameters_and_data.update({"x_data": x}) parameters_and_data, number_samples, number_datapoints = broadcast_parent_values( parameters_and_data) vector_names = self.vector_parameters vector_names.add("x_data") reshaped_parameters_and_data, _ = self._preproces_vector_input( parameters_and_data, vector_names) x = reshaped_parameters_and_data.pop("x_data") return x, reshaped_parameters_and_data, number_samples, number_datapoints
def calculate_log_probability(self, x, z): """ One line description Parameters ---------- Returns ------- """ reshaped_dict, n_samples, n_datapoints = broadcast_parent_values({"x": x, "z": z}) labels = np.reshape(reshaped_dict["x"].data, newshape=(n_samples*n_datapoints, 1)) log_probability = -F.softmax_cross_entropy(reshaped_dict["z"], labels, reduce="no") log_probability = F.reshape(log_probability, shape=(n_samples, n_datapoints)) return log_probability
def _apply_link( self, parents_values ): #TODO: This is for allowing discrete data, temporary? (for julia) #For Julia: Very important method cont_values, discrete_values = split_dict( parents_values, condition=lambda key, val: not is_discrete(val)) if cont_values: reshaped_dict, number_samples, number_datapoints = broadcast_parent_values( cont_values) reshaped_dict.update(discrete_values) else: reshaped_dict = discrete_values reshaped_output = self.link(reshaped_dict) output = { key: val.view(size=(number_samples, number_datapoints) + val.shape[1:]) if is_tensor(val) else val for key, val in reshaped_output.items() } return output
def _apply_link(self, parents_values ): #TODO: This is for allowing discrete data, temporary? cont_values, discrete_values = split_dict( parents_values, condition=lambda key, val: isinstance(val, chainer.Variable)) if cont_values: reshaped_dict, number_samples, number_datapoints = broadcast_parent_values( cont_values) reshaped_dict.update(discrete_values) else: reshaped_dict = discrete_values reshaped_output = self.link(reshaped_dict) output = { key: F.reshape(val, (number_samples, number_datapoints) + val.shape[1:]) if isinstance(val, chainer.Variable) else val for key, val in reshaped_output.items() } return output