| 108 | |
| 109 | |
| 110 | class DIEN(): |
| 111 | def __init__(self, |
| 112 | feature_column=None, |
| 113 | learning_rate=0.001, |
| 114 | embedding_dim=18, |
| 115 | hidden_size=36, |
| 116 | attention_size=36, |
| 117 | inputs=None, |
| 118 | optimizer_type='adam', |
| 119 | bf16=False, |
| 120 | stock_tf=None, |
| 121 | emb_fusion=None, |
| 122 | ev=None, |
| 123 | ev_elimination=None, |
| 124 | ev_filter=None, |
| 125 | adaptive_emb=None, |
| 126 | dynamic_ev=None, |
| 127 | ev_opt=None, |
| 128 | multihash=None, |
| 129 | input_layer_partitioner=None, |
| 130 | dense_layer_partitioner=None): |
| 131 | if not inputs: |
| 132 | raise ValueError('Dataset is not defined.') |
| 133 | if not feature_column: |
| 134 | raise ValueError('Dense column or sparse column is not defined.') |
| 135 | self._feature = inputs[0] |
| 136 | self._label = inputs[1] |
| 137 | |
| 138 | self._uid_emb_column = feature_column['uid_emb_column'] |
| 139 | self._item_cate_column = feature_column['item_cate_column'] |
| 140 | self._his_item_cate_column = feature_column['his_item_cate_column'] |
| 141 | self._category_cate_column = feature_column['category_cate_column'] |
| 142 | self._his_category_cate_column = feature_column[ |
| 143 | 'his_category_cate_column'] |
| 144 | self._noclk_his_item_cate_column = feature_column[ |
| 145 | 'noclk_his_item_cate_column'] |
| 146 | self._noclk_his_category_cate_column = feature_column[ |
| 147 | 'noclk_his_category_cate_column'] |
| 148 | |
| 149 | self.tf = stock_tf |
| 150 | self.bf16 = False if self.tf else bf16 |
| 151 | self.is_training = True |
| 152 | self._emb_fusion = emb_fusion |
| 153 | self._adaptive_emb = adaptive_emb |
| 154 | self._ev = ev |
| 155 | self._ev_elimination = ev_elimination |
| 156 | self._ev_filter = ev_filter |
| 157 | self._dynamic_ev = dynamic_ev |
| 158 | self._ev_opt = ev_opt |
| 159 | self._multihash = multihash |
| 160 | |
| 161 | self._learning_rate = learning_rate |
| 162 | self._optimizer_type = optimizer_type |
| 163 | self._input_layer_partitioner = input_layer_partitioner |
| 164 | self._dense_layer_partitioner = dense_layer_partitioner |
| 165 | |
| 166 | self._batch_size = tf.shape(self._label)[0] |
| 167 | self._embedding_dim = embedding_dim |