| 48 | |
| 49 | |
| 50 | class DIN(): |
| 51 | def __init__(self, |
| 52 | feature_column=None, |
| 53 | learning_rate=0.001, |
| 54 | embedding_dim=16, |
| 55 | hidden_size=36, |
| 56 | attention_size=36, |
| 57 | inputs=None, |
| 58 | optimizer_type='adam', |
| 59 | bf16=False, |
| 60 | stock_tf=None, |
| 61 | emb_fusion=None, |
| 62 | ev=None, |
| 63 | ev_elimination=None, |
| 64 | ev_filter=None, |
| 65 | adaptive_emb=None, |
| 66 | dynamic_ev=None, |
| 67 | ev_opt=None, |
| 68 | multihash=None, |
| 69 | input_layer_partitioner=None, |
| 70 | dense_layer_partitioner=None): |
| 71 | if not inputs: |
| 72 | raise ValueError('Dataset is not defined.') |
| 73 | if not feature_column: |
| 74 | raise ValueError('Dense column or sparse column is not defined.') |
| 75 | self._feature = inputs[0] |
| 76 | self._label = inputs[1] |
| 77 | |
| 78 | self._uid_emb_column = feature_column['uid_emb_column'] |
| 79 | self._item_cate_column = feature_column['item_cate_column'] |
| 80 | self._his_item_cate_column = feature_column['his_item_cate_column'] |
| 81 | self._category_cate_column = feature_column['category_cate_column'] |
| 82 | self._his_category_cate_column = feature_column[ |
| 83 | 'his_category_cate_column'] |
| 84 | |
| 85 | self.tf = stock_tf |
| 86 | self.bf16 = False if self.tf else bf16 |
| 87 | self.is_training = True |
| 88 | self._emb_fusion = emb_fusion |
| 89 | self._adaptive_emb = adaptive_emb |
| 90 | self._ev = ev |
| 91 | self._ev_elimination = ev_elimination |
| 92 | self._ev_filter = ev_filter |
| 93 | self._dynamic_ev = dynamic_ev |
| 94 | self._ev_opt = ev_opt |
| 95 | self._multihash = multihash |
| 96 | |
| 97 | self._learning_rate = learning_rate |
| 98 | self._optimizer_type = optimizer_type |
| 99 | self._input_layer_partitioner = input_layer_partitioner |
| 100 | self._dense_layer_partitioner = dense_layer_partitioner |
| 101 | |
| 102 | self._batch_size = tf.shape(self._label)[0] |
| 103 | self._embedding_dim = embedding_dim |
| 104 | self._hidden_size = hidden_size |
| 105 | self._attention_size = attention_size |
| 106 | self._data_type = tf.bfloat16 if self.bf16 else tf.float32 |
| 107 | |