def _build_tf_train_graph(self) -> Tuple["tf.Tensor", "tf.Tensor"]: """Bulid train graph using iterator.""" # iterator returns a_in, b_in, action_ids self.a_in, self.b_in, _ = self._iterator.get_next() if isinstance(self.featurizer, MaxHistoryTrackerFeaturizer): # add time dimension if max history featurizer is used self.b_in = self.b_in[:, tf.newaxis, :] all_bot_raw = tf.constant(self._encoded_all_label_ids, dtype=tf.float32, name="all_bot_raw") self.dial_embed, mask = self._create_tf_dial(self.a_in) self.bot_embed = self._create_tf_bot_embed(self.b_in) self.all_bot_embed = self._create_tf_bot_embed(all_bot_raw) return train_utils.calculate_loss_acc( self.dial_embed, self.bot_embed, self.b_in, self.all_bot_embed, all_bot_raw, self.num_neg, mask, self.loss_type, self.mu_pos, self.mu_neg, self.use_max_sim_neg, self.C_emb, self.scale_loss, )
def _build_tf_train_graph( self, session_data: SessionDataType) -> Tuple["tf.Tensor", "tf.Tensor"]: # get in tensors from generator self.batch_in = self._iterator.get_next() # convert encoded all labels into the batch format label_batch = train_utils.prepare_batch(self._label_data) # convert batch format into sparse and dense tensors batch_data, _ = train_utils.batch_to_session_data( self.batch_in, session_data) label_data, _ = train_utils.batch_to_session_data( label_batch, self._label_data) a = self._combine_sparse_dense_features(batch_data["text_features"], batch_data["text_mask"][0], "text") b = self._combine_sparse_dense_features(batch_data["label_features"], batch_data["label_mask"][0], "label") all_bs = self._combine_sparse_dense_features( label_data["label_features"], label_data["label_mask"][0], "label") self.message_embed = self._create_tf_embed_fnn( a, self.hidden_layer_sizes["text"], fnn_name="text_label" if self.share_hidden_layers else "text", embed_name="text", ) self.label_embed = self._create_tf_embed_fnn( b, self.hidden_layer_sizes["label"], fnn_name="text_label" if self.share_hidden_layers else "label", embed_name="label", ) self.all_labels_embed = self._create_tf_embed_fnn( all_bs, self.hidden_layer_sizes["label"], fnn_name="text_label" if self.share_hidden_layers else "label", embed_name="label", ) return train_utils.calculate_loss_acc( self.message_embed, self.label_embed, b, self.all_labels_embed, all_bs, self.num_neg, None, self.loss_type, self.mu_pos, self.mu_neg, self.use_max_sim_neg, self.C_emb, self.scale_loss, )
def _build_tf_train_graph(self) -> Tuple["tf.Tensor", "tf.Tensor"]: self.a_in, self.b_in = self._iterator.get_next() all_label_ids = tf.constant(self._encoded_all_label_ids, dtype=tf.float32, name="all_label_ids") self.message_embed = self._create_tf_embed_fnn( self.a_in, self.hidden_layer_sizes["a"], fnn_name="a_b" if self.share_hidden_layers else "a", embed_name="a", ) self.label_embed = self._create_tf_embed_fnn( self.b_in, self.hidden_layer_sizes["b"], fnn_name="a_b" if self.share_hidden_layers else "b", embed_name="b", ) self.all_labels_embed = self._create_tf_embed_fnn( all_label_ids, self.hidden_layer_sizes["b"], fnn_name="a_b" if self.share_hidden_layers else "b", embed_name="b", ) return train_utils.calculate_loss_acc( self.message_embed, self.label_embed, self.b_in, self.all_labels_embed, all_label_ids, self.num_neg, None, self.loss_type, self.mu_pos, self.mu_neg, self.use_max_sim_neg, self.C_emb, self.scale_loss, )