{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"2022-01-22-deepcross.ipynb","provenance":[{"file_id":"https://github.com/recohut/nbs/blob/main/raw/T200562%20%7C%20DeepCross%20on%20Criteo%20Ad%20Dataset%20in%20TF%202x.ipynb","timestamp":1644661419144},{"file_id":"1bhRkvGnfmxPWUPFRag57Dl6-4pl1ZEzm","timestamp":1637063763209}],"collapsed_sections":[],"mount_file_id":"1bhRkvGnfmxPWUPFRag57Dl6-4pl1ZEzm","authorship_tag":"ABX9TyMwMV18x8wDBFNC+kLHiAZA"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"markdown","source":["# DeepCross on Criteo Ad Dataset in TF 2.x"],"metadata":{"id":"7oChPYgvdfvE"}},{"cell_type":"code","metadata":{"id":"0pxSU24FbSAy"},"source":["!pip install tensorflow==2.5.0"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"QnFg_wXiclo4","executionInfo":{"status":"ok","timestamp":1637061269255,"user_tz":-330,"elapsed":135691,"user":{"displayName":"Sparsh Agarwal","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"13037694610922482904"}},"outputId":"6cc6fdd1-38da-459c-ea28-576e6c5492b1"},"source":["!pip install -q -U kaggle\n","!pip install --upgrade --force-reinstall --no-deps kaggle\n","!mkdir ~/.kaggle\n","!cp /content/drive/MyDrive/kaggle.json ~/.kaggle/\n","!chmod 600 ~/.kaggle/kaggle.json\n","!kaggle datasets download -d mrkmakr/criteo-dataset"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Collecting kaggle\n"," Downloading kaggle-1.5.12.tar.gz (58 kB)\n","\u001b[K |████████████████████████████████| 58 kB 2.6 MB/s \n","\u001b[?25hBuilding wheels for collected packages: kaggle\n"," Building wheel for kaggle (setup.py) ... \u001b[?25l\u001b[?25hdone\n"," Created wheel for kaggle: filename=kaggle-1.5.12-py3-none-any.whl size=73051 sha256=d0e4b97f111ac4c64a7c2fead5edb3baa0f1f4f21eca031e865b06b3f40f3bbb\n"," Stored in directory: /root/.cache/pip/wheels/62/d6/58/5853130f941e75b2177d281eb7e44b4a98ed46dd155f556dc5\n","Successfully built kaggle\n","Installing collected packages: kaggle\n"," Attempting uninstall: kaggle\n"," Found existing installation: kaggle 1.5.12\n"," Uninstalling kaggle-1.5.12:\n"," Successfully uninstalled kaggle-1.5.12\n","Successfully installed kaggle-1.5.12\n","Downloading criteo-dataset.zip to /content\n","100% 4.31G/4.31G [02:05<00:00, 44.7MB/s]\n","100% 4.31G/4.31G [02:05<00:00, 36.8MB/s]\n"]}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"PZYBD38Ad5j2","executionInfo":{"status":"ok","timestamp":1637061804413,"user_tz":-330,"elapsed":325474,"user":{"displayName":"Sparsh Agarwal","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"13037694610922482904"}},"outputId":"efff747a-58f1-49d5-bb09-51875616aaa0"},"source":["!unzip criteo-dataset.zip"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Archive: criteo-dataset.zip\n"," inflating: dac/readme.txt \n"," inflating: dac/test.txt \n"," inflating: dac/train.txt \n"]}]},{"cell_type":"code","metadata":{"id":"BZwknC3Gd8Qg"},"source":["import os\n","import pandas as pd\n","import numpy as np\n","from sklearn.preprocessing import LabelEncoder, KBinsDiscretizer\n","from sklearn.model_selection import train_test_split\n","\n","import tensorflow as tf\n","from tensorflow.keras import Model\n","from tensorflow.keras.layers import Layer, Input, ReLU\n","from tensorflow.keras.layers import Dense, Embedding, Dropout\n","from tensorflow.keras.regularizers import l2\n","from tensorflow.keras.losses import binary_crossentropy\n","from tensorflow.keras.callbacks import EarlyStopping\n","from tensorflow.keras.optimizers import Adam\n","from tensorflow.keras.metrics import AUC"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"GDRfYvu4e4mO"},"source":["os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'\n","os.environ['CUDA_VISIBLE_DEVICES'] = '0'\n","\n","file = 'dac/train.txt'\n","read_part = True\n","sample_num = 10000\n","test_size = 0.2\n","\n","embed_dim = 8\n","dnn_dropout = 0.5\n","hidden_units = [256, 128, 64]\n","\n","learning_rate = 0.001\n","batch_size = 4096\n","epochs = 10"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"9zzb1WXIet8A"},"source":["def sparseFeature(feat, feat_num, embed_dim=4):\n"," \"\"\"\n"," create dictionary for sparse feature\n"," :param feat: feature name\n"," :param feat_num: the total number of sparse features that do not repeat\n"," :param embed_dim: embedding dimension\n"," :return:\n"," \"\"\"\n"," return {'feat_name': feat, 'feat_num': feat_num, 'embed_dim': embed_dim}\n","\n","\n","def denseFeature(feat):\n"," \"\"\"\n"," create dictionary for dense feature\n"," :param feat: dense feature name\n"," :return:\n"," \"\"\"\n"," return {'feat_name': feat}"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"5NnOfRIQerQh"},"source":["def create_criteo_dataset(file, embed_dim=8, read_part=True, sample_num=100000, test_size=0.2):\n"," \"\"\"\n"," a example about creating criteo dataset\n"," :param file: dataset's path\n"," :param embed_dim: the embedding dimension of sparse features\n"," :param read_part: whether to read part of it\n"," :param sample_num: the number of instances if read_part is True\n"," :param test_size: ratio of test dataset\n"," :return: feature columns, train, test\n"," \"\"\"\n"," names = ['label', 'I1', 'I2', 'I3', 'I4', 'I5', 'I6', 'I7', 'I8', 'I9', 'I10', 'I11',\n"," 'I12', 'I13', 'C1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8', 'C9', 'C10', 'C11',\n"," 'C12', 'C13', 'C14', 'C15', 'C16', 'C17', 'C18', 'C19', 'C20', 'C21', 'C22',\n"," 'C23', 'C24', 'C25', 'C26']\n","\n"," if read_part:\n"," data_df = pd.read_csv(file, sep='\\t', iterator=True, header=None,\n"," names=names)\n"," data_df = data_df.get_chunk(sample_num)\n","\n"," else:\n"," data_df = pd.read_csv(file, sep='\\t', header=None, names=names)\n","\n"," sparse_features = ['C' + str(i) for i in range(1, 27)]\n"," dense_features = ['I' + str(i) for i in range(1, 14)]\n"," features = sparse_features + dense_features\n","\n"," data_df[sparse_features] = data_df[sparse_features].fillna('-1')\n"," data_df[dense_features] = data_df[dense_features].fillna(0)\n","\n"," # Bin continuous data into intervals.\n"," est = KBinsDiscretizer(n_bins=100, encode='ordinal', strategy='uniform')\n"," data_df[dense_features] = est.fit_transform(data_df[dense_features])\n","\n"," for feat in sparse_features:\n"," le = LabelEncoder()\n"," data_df[feat] = le.fit_transform(data_df[feat])\n","\n"," # ==============Feature Engineering===================\n","\n"," # ====================================================\n"," feature_columns = [sparseFeature(feat, int(data_df[feat].max()) + 1, embed_dim=embed_dim)\n"," for feat in features]\n"," train, test = train_test_split(data_df, test_size=test_size)\n","\n"," train_X = train[features].values.astype('int32')\n"," train_y = train['label'].values.astype('int32')\n"," test_X = test[features].values.astype('int32')\n"," test_y = test['label'].values.astype('int32')\n","\n"," return feature_columns, (train_X, train_y), (test_X, test_y)"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"m6L1wMGGeCGE"},"source":["class Residual_Units(Layer):\n"," \"\"\"\n"," Residual Units\n"," \"\"\"\n"," def __init__(self, hidden_unit, dim_stack):\n"," \"\"\"\n"," :param hidden_unit: A list. Neural network hidden units.\n"," :param dim_stack: A scalar. The dimension of inputs unit.\n"," \"\"\"\n"," super(Residual_Units, self).__init__()\n"," self.layer1 = Dense(units=hidden_unit, activation='relu')\n"," self.layer2 = Dense(units=dim_stack, activation=None)\n"," self.relu = ReLU()\n","\n"," def call(self, inputs, **kwargs):\n"," x = inputs\n"," x = self.layer1(x)\n"," x = self.layer2(x)\n"," outputs = self.relu(x + inputs)\n"," return outputs"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"K09g18Cmgxrf"},"source":["class Deep_Crossing(Model):\n"," def __init__(self, feature_columns, hidden_units, res_dropout=0., embed_reg=1e-6):\n"," \"\"\"\n"," Deep&Crossing\n"," :param feature_columns: A list. sparse column feature information.\n"," :param hidden_units: A list. Neural network hidden units.\n"," :param res_dropout: A scalar. Dropout of resnet.\n"," :param embed_reg: A scalar. The regularizer of embedding.\n"," \"\"\"\n"," super(Deep_Crossing, self).__init__()\n"," self.sparse_feature_columns = feature_columns\n"," self.embed_layers = {\n"," 'embed_' + str(i): Embedding(input_dim=feat['feat_num'],\n"," input_length=1,\n"," output_dim=feat['embed_dim'],\n"," embeddings_initializer='random_uniform',\n"," embeddings_regularizer=l2(embed_reg))\n"," for i, feat in enumerate(self.sparse_feature_columns)\n"," }\n"," # the total length of embedding layers\n"," embed_layers_len = sum([feat['embed_dim'] for feat in self.sparse_feature_columns])\n"," self.res_network = [Residual_Units(unit, embed_layers_len) for unit in hidden_units]\n"," self.res_dropout = Dropout(res_dropout)\n"," self.dense = Dense(1, activation=None)\n","\n"," def call(self, inputs):\n"," sparse_inputs = inputs\n"," sparse_embed = tf.concat([self.embed_layers['embed_{}'.format(i)](sparse_inputs[:, i])\n"," for i in range(sparse_inputs.shape[1])], axis=-1)\n"," r = sparse_embed\n"," for res in self.res_network:\n"," r = res(r)\n"," r = self.res_dropout(r)\n"," outputs = tf.nn.sigmoid(self.dense(r))\n"," return outputs\n","\n"," def summary(self):\n"," sparse_inputs = Input(shape=(len(self.sparse_feature_columns),), dtype=tf.int32)\n"," Model(inputs=sparse_inputs, outputs=self.call(sparse_inputs)).summary()"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"dHIfDXsXePmP","executionInfo":{"status":"ok","timestamp":1637063713365,"user_tz":-330,"elapsed":14345,"user":{"displayName":"Sparsh Agarwal","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"13037694610922482904"}},"outputId":"b9c08e06-e0ad-43d0-a736-9dda9ee99f50"},"source":["# ========================== Create dataset =======================\n","feature_columns, train, test = create_criteo_dataset(file=file,\n"," embed_dim=embed_dim,\n"," read_part=read_part,\n"," sample_num=sample_num,\n"," test_size=test_size)\n","train_X, train_y = train\n","test_X, test_y = test\n","# ============================Build Model==========================\n","mirrored_strategy = tf.distribute.MirroredStrategy()\n","with mirrored_strategy.scope():\n"," model = Deep_Crossing(feature_columns, hidden_units)\n"," model.summary()\n"," # =========================Compile============================\n"," model.compile(loss=binary_crossentropy, optimizer=Adam(learning_rate=learning_rate),\n"," metrics=[AUC()])\n","# ============================model checkpoint======================\n","# check_path = 'save/deep_crossing_weights.epoch_{epoch:04d}.val_loss_{val_loss:.4f}.ckpt'\n","# checkpoint = tf.keras.callbacks.ModelCheckpoint(check_path, save_weights_only=True,\n","# verbose=1, period=5)\n","# ===========================Fit==============================\n","model.fit(\n"," train_X,\n"," train_y,\n"," epochs=epochs,\n"," callbacks=[EarlyStopping(monitor='val_loss', patience=2, restore_best_weights=True)], # checkpoint\n"," batch_size=batch_size,\n"," validation_split=0.1\n",")\n","# ===========================Test==============================\n","print('test AUC: %f' % model.evaluate(test_X, test_y, batch_size=batch_size)[1])"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["WARNING:tensorflow:There are non-GPU devices in `tf.distribute.Strategy`, not using nccl allreduce.\n","WARNING:tensorflow:Collective ops is not configured at program startup. Some performance features may not be enabled.\n","INFO:tensorflow:Using MirroredStrategy with devices ('/job:localhost/replica:0/task:0/device:CPU:0',)\n","Model: \"model\"\n","__________________________________________________________________________________________________\n","Layer (type) Output Shape Param # Connected to \n","==================================================================================================\n","input_1 (InputLayer) [(None, 39)] 0 \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem (Slici (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_1 (Sli (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_2 (Sli (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_3 (Sli (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_4 (Sli (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_5 (Sli (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_6 (Sli (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_7 (Sli (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_8 (Sli (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_9 (Sli (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_10 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_11 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_12 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_13 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_14 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_15 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_16 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_17 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_18 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_19 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_20 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_21 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_22 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_23 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_24 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_25 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_26 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_27 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_28 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_29 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_30 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_31 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_32 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_33 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_34 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_35 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_36 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_37 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","tf.__operators__.getitem_38 (Sl (None,) 0 input_1[0][0] \n","__________________________________________________________________________________________________\n","embedding (Embedding) (None, 8) 1400 tf.__operators__.getitem[0][0] \n","__________________________________________________________________________________________________\n","embedding_1 (Embedding) (None, 8) 3088 tf.__operators__.getitem_1[0][0] \n","__________________________________________________________________________________________________\n","embedding_2 (Embedding) (None, 8) 44168 tf.__operators__.getitem_2[0][0] \n","__________________________________________________________________________________________________\n","embedding_3 (Embedding) (None, 8) 32264 tf.__operators__.getitem_3[0][0] \n","__________________________________________________________________________________________________\n","embedding_4 (Embedding) (None, 8) 448 tf.__operators__.getitem_4[0][0] \n","__________________________________________________________________________________________________\n","embedding_5 (Embedding) (None, 8) 64 tf.__operators__.getitem_5[0][0] \n","__________________________________________________________________________________________________\n","embedding_6 (Embedding) (None, 8) 25472 tf.__operators__.getitem_6[0][0] \n","__________________________________________________________________________________________________\n","embedding_7 (Embedding) (None, 8) 744 tf.__operators__.getitem_7[0][0] \n","__________________________________________________________________________________________________\n","embedding_8 (Embedding) (None, 8) 24 tf.__operators__.getitem_8[0][0] \n","__________________________________________________________________________________________________\n","embedding_9 (Embedding) (None, 8) 23888 tf.__operators__.getitem_9[0][0] \n","__________________________________________________________________________________________________\n","embedding_10 (Embedding) (None, 8) 16672 tf.__operators__.getitem_10[0][0]\n","__________________________________________________________________________________________________\n","embedding_11 (Embedding) (None, 8) 42272 tf.__operators__.getitem_11[0][0]\n","__________________________________________________________________________________________________\n","embedding_12 (Embedding) (None, 8) 13800 tf.__operators__.getitem_12[0][0]\n","__________________________________________________________________________________________________\n","embedding_13 (Embedding) (None, 8) 192 tf.__operators__.getitem_13[0][0]\n","__________________________________________________________________________________________________\n","embedding_14 (Embedding) (None, 8) 16280 tf.__operators__.getitem_14[0][0]\n","__________________________________________________________________________________________________\n","embedding_15 (Embedding) (None, 8) 37792 tf.__operators__.getitem_15[0][0]\n","__________________________________________________________________________________________________\n","embedding_16 (Embedding) (None, 8) 72 tf.__operators__.getitem_16[0][0]\n","__________________________________________________________________________________________________\n","embedding_17 (Embedding) (None, 8) 9192 tf.__operators__.getitem_17[0][0]\n","__________________________________________________________________________________________________\n","embedding_18 (Embedding) (None, 8) 4376 tf.__operators__.getitem_18[0][0]\n","__________________________________________________________________________________________________\n","embedding_19 (Embedding) (None, 8) 32 tf.__operators__.getitem_19[0][0]\n","__________________________________________________________________________________________________\n","embedding_20 (Embedding) (None, 8) 40296 tf.__operators__.getitem_20[0][0]\n","__________________________________________________________________________________________________\n","embedding_21 (Embedding) (None, 8) 64 tf.__operators__.getitem_21[0][0]\n","__________________________________________________________________________________________________\n","embedding_22 (Embedding) (None, 8) 96 tf.__operators__.getitem_22[0][0]\n","__________________________________________________________________________________________________\n","embedding_23 (Embedding) (None, 8) 20200 tf.__operators__.getitem_23[0][0]\n","__________________________________________________________________________________________________\n","embedding_24 (Embedding) (None, 8) 320 tf.__operators__.getitem_24[0][0]\n","__________________________________________________________________________________________________\n","embedding_25 (Embedding) (None, 8) 15512 tf.__operators__.getitem_25[0][0]\n","__________________________________________________________________________________________________\n","embedding_26 (Embedding) (None, 8) 800 tf.__operators__.getitem_26[0][0]\n","__________________________________________________________________________________________________\n","embedding_27 (Embedding) (None, 8) 800 tf.__operators__.getitem_27[0][0]\n","__________________________________________________________________________________________________\n","embedding_28 (Embedding) (None, 8) 800 tf.__operators__.getitem_28[0][0]\n","__________________________________________________________________________________________________\n","embedding_29 (Embedding) (None, 8) 800 tf.__operators__.getitem_29[0][0]\n","__________________________________________________________________________________________________\n","embedding_30 (Embedding) (None, 8) 800 tf.__operators__.getitem_30[0][0]\n","__________________________________________________________________________________________________\n","embedding_31 (Embedding) (None, 8) 800 tf.__operators__.getitem_31[0][0]\n","__________________________________________________________________________________________________\n","embedding_32 (Embedding) (None, 8) 800 tf.__operators__.getitem_32[0][0]\n","__________________________________________________________________________________________________\n","embedding_33 (Embedding) (None, 8) 800 tf.__operators__.getitem_33[0][0]\n","__________________________________________________________________________________________________\n","embedding_34 (Embedding) (None, 8) 800 tf.__operators__.getitem_34[0][0]\n","__________________________________________________________________________________________________\n","embedding_35 (Embedding) (None, 8) 800 tf.__operators__.getitem_35[0][0]\n","__________________________________________________________________________________________________\n","embedding_36 (Embedding) (None, 8) 800 tf.__operators__.getitem_36[0][0]\n","__________________________________________________________________________________________________\n","embedding_37 (Embedding) (None, 8) 800 tf.__operators__.getitem_37[0][0]\n","__________________________________________________________________________________________________\n","embedding_38 (Embedding) (None, 8) 800 tf.__operators__.getitem_38[0][0]\n","__________________________________________________________________________________________________\n","tf.concat (TFOpLambda) (None, 312) 0 embedding[0][0] \n"," embedding_1[0][0] \n"," embedding_2[0][0] \n"," embedding_3[0][0] \n"," embedding_4[0][0] \n"," embedding_5[0][0] \n"," embedding_6[0][0] \n"," embedding_7[0][0] \n"," embedding_8[0][0] \n"," embedding_9[0][0] \n"," embedding_10[0][0] \n"," embedding_11[0][0] \n"," embedding_12[0][0] \n"," embedding_13[0][0] \n"," embedding_14[0][0] \n"," embedding_15[0][0] \n"," embedding_16[0][0] \n"," embedding_17[0][0] \n"," embedding_18[0][0] \n"," embedding_19[0][0] \n"," embedding_20[0][0] \n"," embedding_21[0][0] \n"," embedding_22[0][0] \n"," embedding_23[0][0] \n"," embedding_24[0][0] \n"," embedding_25[0][0] \n"," embedding_26[0][0] \n"," embedding_27[0][0] \n"," embedding_28[0][0] \n"," embedding_29[0][0] \n"," embedding_30[0][0] \n"," embedding_31[0][0] \n"," embedding_32[0][0] \n"," embedding_33[0][0] \n"," embedding_34[0][0] \n"," embedding_35[0][0] \n"," embedding_36[0][0] \n"," embedding_37[0][0] \n"," embedding_38[0][0] \n","__________________________________________________________________________________________________\n","residual__units (Residual_Units (None, 312) 160312 tf.concat[0][0] \n","__________________________________________________________________________________________________\n","residual__units_1 (Residual_Uni (None, 312) 80312 residual__units[0][0] \n","__________________________________________________________________________________________________\n","residual__units_2 (Residual_Uni (None, 312) 40312 residual__units_1[0][0] \n","__________________________________________________________________________________________________\n","dropout (Dropout) (None, 312) 0 residual__units_2[0][0] \n","__________________________________________________________________________________________________\n","dense_6 (Dense) (None, 1) 313 dropout[0][0] \n","__________________________________________________________________________________________________\n","tf.math.sigmoid (TFOpLambda) (None, 1) 0 dense_6[0][0] \n","==================================================================================================\n","Total params: 640,377\n","Trainable params: 640,377\n","Non-trainable params: 0\n","__________________________________________________________________________________________________\n","Epoch 1/10\n","2/2 [==============================] - 9s 2s/step - loss: 0.6509 - auc: 0.4894 - val_loss: 0.5833 - val_auc: 0.4670\n","Epoch 2/10\n","2/2 [==============================] - 0s 232ms/step - loss: 0.5611 - auc: 0.5267 - val_loss: 0.5340 - val_auc: 0.4906\n","Epoch 3/10\n","2/2 [==============================] - 0s 228ms/step - loss: 0.5265 - auc: 0.5544 - val_loss: 0.5617 - val_auc: 0.5473\n","Epoch 4/10\n","2/2 [==============================] - 0s 231ms/step - loss: 0.5339 - auc: 0.6971 - val_loss: 0.5361 - val_auc: 0.5915\n","1/1 [==============================] - 0s 113ms/step - loss: 0.5191 - auc: 0.5249\n","test AUC: 0.524854\n"]}]},{"cell_type":"code","metadata":{"id":"UKnzXHU2k0Bt"},"source":[""],"execution_count":null,"outputs":[]}]}