1 lines (1 with data), 61.5 kB
{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"SG-QAFFN_cross_entropy.ipynb","version":"0.3.2","provenance":[{"file_id":"1XIn68D4-toNoNqJ_Zk7GJIrJ2AMXL-sX","timestamp":1556127036366}],"collapsed_sections":[]},"kernelspec":{"name":"python3","display_name":"Python 3"},"accelerator":"TPU"},"cells":[{"metadata":{"id":"fBYR7rLZBYNS","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":121},"outputId":"7c69f280-3f6b-4d5b-d106-04a072c9f400","executionInfo":{"status":"ok","timestamp":1556127190171,"user_tz":420,"elapsed":22441,"user":{"displayName":"Santosh Gupta","photoUrl":"","userId":"14163791406641115409"}}},"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/gdrive')"],"execution_count":1,"outputs":[{"output_type":"stream","text":["Go to this URL in a browser: https://accounts.google.com/o/oauth2/auth?client_id=947318989803-6bn6qk8qdgf4n4g3pfee6491hc0brc4i.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=email%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdocs.test%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.photos.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fpeopleapi.readonly&response_type=code\n","\n","Enter your authorization code:\n","··········\n","Mounted at /content/gdrive\n"],"name":"stdout"}]},{"metadata":{"id":"ueDiJQmTB17f","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":541},"outputId":"f8b9ea9e-23be-47d1-c03a-933556beab89","executionInfo":{"status":"ok","timestamp":1556127269975,"user_tz":420,"elapsed":102243,"user":{"displayName":"Santosh Gupta","photoUrl":"","userId":"14163791406641115409"}}},"cell_type":"code","source":["# install tf 2.0\n","from __future__ import absolute_import, division, print_function, unicode_literals\n","\n","!pip install tensorflow-gpu==2.0.0-alpha0\n","import tensorflow as tf\n","\n","print(tf.__version__)"],"execution_count":2,"outputs":[{"output_type":"stream","text":["Collecting tensorflow-gpu==2.0.0-alpha0\n","\u001b[?25l Downloading https://files.pythonhosted.org/packages/1a/66/32cffad095253219d53f6b6c2a436637bbe45ac4e7be0244557210dc3918/tensorflow_gpu-2.0.0a0-cp36-cp36m-manylinux1_x86_64.whl (332.1MB)\n","\u001b[K 100% |████████████████████████████████| 332.1MB 67kB/s \n","\u001b[?25hRequirement already satisfied: gast>=0.2.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu==2.0.0-alpha0) (0.2.2)\n","Collecting tb-nightly<1.14.0a20190302,>=1.14.0a20190301 (from tensorflow-gpu==2.0.0-alpha0)\n","\u001b[?25l Downloading https://files.pythonhosted.org/packages/a9/51/aa1d756644bf4624c03844115e4ac4058eff77acd786b26315f051a4b195/tb_nightly-1.14.0a20190301-py3-none-any.whl (3.0MB)\n","\u001b[K 100% |████████████████████████████████| 3.0MB 8.3MB/s \n","\u001b[?25hRequirement already satisfied: six>=1.10.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu==2.0.0-alpha0) (1.12.0)\n","Requirement already satisfied: grpcio>=1.8.6 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu==2.0.0-alpha0) (1.15.0)\n","Requirement already satisfied: wheel>=0.26 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu==2.0.0-alpha0) (0.33.1)\n","Requirement already satisfied: numpy<2.0,>=1.14.5 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu==2.0.0-alpha0) (1.16.3)\n","Collecting google-pasta>=0.1.2 (from tensorflow-gpu==2.0.0-alpha0)\n","\u001b[?25l Downloading https://files.pythonhosted.org/packages/64/bb/f1bbc131d6294baa6085a222d29abadd012696b73dcbf8cf1bf56b9f082a/google_pasta-0.1.5-py3-none-any.whl (51kB)\n","\u001b[K 100% |████████████████████████████████| 61kB 24.2MB/s \n","\u001b[?25hCollecting tf-estimator-nightly<1.14.0.dev2019030116,>=1.14.0.dev2019030115 (from tensorflow-gpu==2.0.0-alpha0)\n","\u001b[?25l Downloading https://files.pythonhosted.org/packages/13/82/f16063b4eed210dc2ab057930ac1da4fbe1e91b7b051a6c8370b401e6ae7/tf_estimator_nightly-1.14.0.dev2019030115-py2.py3-none-any.whl (411kB)\n","\u001b[K 100% |████████████████████████████████| 419kB 12.4MB/s \n","\u001b[?25hRequirement already satisfied: termcolor>=1.1.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu==2.0.0-alpha0) (1.1.0)\n","Requirement already satisfied: keras-applications>=1.0.6 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu==2.0.0-alpha0) (1.0.7)\n","Requirement already satisfied: astor>=0.6.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu==2.0.0-alpha0) (0.7.1)\n","Requirement already satisfied: protobuf>=3.6.1 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu==2.0.0-alpha0) (3.7.1)\n","Requirement already satisfied: keras-preprocessing>=1.0.5 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu==2.0.0-alpha0) (1.0.9)\n","Requirement already satisfied: absl-py>=0.7.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu==2.0.0-alpha0) (0.7.1)\n","Requirement already satisfied: werkzeug>=0.11.15 in /usr/local/lib/python3.6/dist-packages (from tb-nightly<1.14.0a20190302,>=1.14.0a20190301->tensorflow-gpu==2.0.0-alpha0) (0.15.2)\n","Requirement already satisfied: markdown>=2.6.8 in /usr/local/lib/python3.6/dist-packages (from tb-nightly<1.14.0a20190302,>=1.14.0a20190301->tensorflow-gpu==2.0.0-alpha0) (3.1)\n","Requirement already satisfied: h5py in /usr/local/lib/python3.6/dist-packages (from keras-applications>=1.0.6->tensorflow-gpu==2.0.0-alpha0) (2.8.0)\n","Requirement already satisfied: setuptools in /usr/local/lib/python3.6/dist-packages (from protobuf>=3.6.1->tensorflow-gpu==2.0.0-alpha0) (40.9.0)\n","Installing collected packages: tb-nightly, google-pasta, tf-estimator-nightly, tensorflow-gpu\n","Successfully installed google-pasta-0.1.5 tb-nightly-1.14.0a20190301 tensorflow-gpu-2.0.0a0 tf-estimator-nightly-1.14.0.dev2019030115\n","2.0.0-alpha0\n"],"name":"stdout"}]},{"metadata":{"id":"uDqguCPeB39D","colab_type":"code","colab":{}},"cell_type":"code","source":["import os\n","from glob import glob\n","\n","import numpy as np\n","import pandas as pd\n","import tensorflow as tf\n","from sklearn.model_selection import train_test_split\n","\n","SEED = 42\n","\n","\n","def _float_list_feature(value):\n"," \"\"\"Returns a float_list from a float / double.\"\"\"\n"," return tf.train.Feature(float_list=tf.train.FloatList(value=value))\n","\n","\n","def _int64_list_feature(value):\n"," \"\"\"Returns an int64_list from a bool / enum / int / uint.\"\"\"\n"," return tf.train.Feature(int64_list=tf.train.Int64List(value=value))\n","\n","\n","def _int64_feature(value):\n"," \"\"\"Returns an int64_list from a bool / enum / int / uint.\"\"\"\n"," return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))\n","\n","\n","def create_generator_for_ffn(\n"," file_list,\n"," mode='train'):\n","\n"," # file_list = glob(os.path.join(data_dir, '*.csv'))\n","\n"," for full_file_path in file_list:\n"," # full_file_path = os.path.join(data_dir, file_name)\n"," if not os.path.exists(full_file_path):\n"," raise FileNotFoundError(\"File %s not found\" % full_file_path)\n"," df = pd.read_csv(full_file_path, encoding='utf8')\n","\n"," # so train test split\n"," if mode == 'train':\n"," df, _ = train_test_split(df, test_size=0.2, random_state=SEED)\n"," else:\n"," _, df = train_test_split(df, test_size=0.2, random_state=SEED)\n","\n"," for _, row in df.iterrows():\n"," q_vectors = np.fromstring(row.question_bert.replace(\n"," '[[', '').replace(']]', ''), sep=' ')\n"," a_vectors = np.fromstring(row.answer_bert.replace(\n"," '[[', '').replace(']]', ''), sep=' ')\n"," vectors = np.stack([q_vectors, a_vectors], axis=0)\n"," if mode in ['train', 'eval']:\n"," yield vectors, 1\n"," else:\n"," yield vectors\n","\n","\n","def ffn_serialize_fn(features):\n"," features_tuple = {'features': _float_list_feature(\n"," features[0].flatten()), 'labels': _int64_feature(features[1])}\n"," example_proto = tf.train.Example(\n"," features=tf.train.Features(feature=features_tuple))\n"," return example_proto.SerializeToString()\n","\n","\n","def make_tfrecord(data_dir, generator_fn, serialize_fn, suffix='', **kwargs):\n"," \"\"\"Function to make TF Records from csv files\n"," This function will take all csv files in data_dir, convert them\n"," to tf example and write to *_{suffix}_train/eval.tfrecord to data_dir.\n","\n"," Arguments:\n"," data_dir {str} -- dir that has csv files and store tf record\n"," generator_fn {fn} -- A function that takes a list of filepath and yield the\n"," parsed recored from file.\n"," serialize_fn {fn} -- A function that takes output of generator fn and convert to tf example\n","\n"," Keyword Arguments:\n"," suffix {str} -- suffix to add to tf record files (default: {''})\n"," \"\"\"\n"," file_list = glob(os.path.join(data_dir, '*.csv'))\n"," train_tf_record_file_list = [\n"," f.replace('.csv', '_{0}_train.tfrecord'.format(suffix)) for f in file_list]\n"," test_tf_record_file_list = [\n"," f.replace('.csv', '_{0}_eval.tfrecord'.format(suffix)) for f in file_list]\n"," for full_file_path, train_tf_record_file_path, test_tf_record_file_path in zip(file_list, train_tf_record_file_list, test_tf_record_file_list):\n"," print('Converting file {0} to TF Record'.format(full_file_path))\n"," with tf.io.TFRecordWriter(train_tf_record_file_path) as writer:\n"," for features in generator_fn([full_file_path], mode='train', **kwargs):\n"," example = serialize_fn(features)\n"," writer.write(example)\n"," with tf.io.TFRecordWriter(test_tf_record_file_path) as writer:\n"," for features in generator_fn([full_file_path], mode='eval', **kwargs):\n"," example = serialize_fn(features)\n"," writer.write(example)\n","\n","\n","def create_dataset_for_ffn(\n"," data_dir,\n"," mode='train',\n"," hidden_size=768,\n"," shuffle_buffer=10000,\n"," prefetch=10000,\n"," batch_size=32):\n","\n"," tfrecord_file_list = glob(os.path.join(\n"," data_dir, '*_FFN_{0}.tfrecord'.format((mode))))\n"," if not tfrecord_file_list:\n"," print('TF Record not found')\n"," make_tfrecord(\n"," data_dir, create_generator_for_ffn,\n"," ffn_serialize_fn, 'FFN')\n","\n"," dataset = tf.data.TFRecordDataset(tfrecord_file_list)\n","\n"," def _parse_ffn_example(example_proto):\n"," feature_description = {\n"," 'features': tf.io.FixedLenFeature([2*768], tf.float32),\n"," 'labels': tf.io.FixedLenFeature([], tf.int64, default_value=0),\n"," }\n"," feature_dict = tf.io.parse_single_example(\n"," example_proto, feature_description)\n"," return tf.reshape(feature_dict['features'], (2, 768)), feature_dict['labels']\n"," dataset = dataset.map(_parse_ffn_example)\n","\n"," dataset = dataset.shuffle(shuffle_buffer)\n","\n"," dataset = dataset.prefetch(prefetch)\n","\n"," dataset = dataset.batch(batch_size)\n"," return dataset"],"execution_count":0,"outputs":[]},{"metadata":{"id":"fFByODECB4lV","colab_type":"code","colab":{}},"cell_type":"code","source":["from __future__ import absolute_import, division, print_function, unicode_literals\n","\n","import os\n","import pandas as pd\n","from sklearn.model_selection import train_test_split\n","import numpy as np\n","\n","import tensorflow as tf\n","import tensorflow.keras.backend as K\n","\n","\n","class FFN(tf.keras.layers.Layer):\n"," def __init__(\n"," self,\n"," hidden_size=768, #SG edit from 768 4-24-19\n"," dropout=0.2,\n"," residual=True,\n"," name='FFN',\n"," **kwargs):\n"," \"\"\"Simple Dense wrapped with various layers\n"," \"\"\"\n","\n"," super(FFN, self).__init__(name=name, **kwargs)\n"," self.hidden_size = hidden_size\n"," self.dropout = dropout\n"," self.residual = residual\n"," self.ffn_layer = tf.keras.layers.Dense(\n"," units=hidden_size,\n"," use_bias=True\n"," )\n","\n"," def call(self, inputs):\n"," ffn_embedding = self.ffn_layer(inputs)\n"," ffn_embedding = tf.keras.layers.ReLU()(ffn_embedding)\n"," if self.dropout > 0:\n"," ffn_embedding = tf.keras.layers.Dropout(\n"," self.dropout)(ffn_embedding)\n","# ffn_embedding = self.ffn_layer(inputs) #SG edit from 768 4-24-19\n","# ffn_embedding = tf.keras.layers.ReLU()(ffn_embedding) #SG edit from 768 4-24-19\n","# if self.dropout > 0: #SG edit from 768 4-24-19\n","# ffn_embedding = tf.keras.layers.Dropout( #SG edit from 768 4-24-19\n","# self.dropout)(ffn_embedding) #SG edit from 768 4-24-19\n","\n","\n"," if self.residual:\n"," ffn_embedding += inputs\n"," return ffn_embedding\n","\n","\n","class MedicalQAModel(tf.keras.Model):\n"," def __init__(self, name=''):\n"," super(MedicalQAModel, self).__init__(name=name)\n"," self.q_ffn = FFN(name='QFFN', input_shape=(768,))\n"," self.a_ffn = FFN(name='AFFN', input_shape=(768,))\n","\n"," def call(self, inputs):\n"," q_bert_embedding, a_bert_embedding = tf.unstack(inputs, axis=1)\n"," q_embedding, a_embedding = self.q_ffn(\n"," q_bert_embedding), self.a_ffn(a_bert_embedding)\n"," return tf.stack([q_embedding, a_embedding], axis=1)\n","\n","\n","class BioBert(tf.keras.Model):\n"," def __init__(self, name=''):\n"," super(BioBert, self).__init__(name=name)\n","\n"," def call(self, inputs):\n","\n"," # inputs is dict with input features\n"," input_ids, input_masks, segment_ids = inputs\n"," # pass to bert\n"," # with shape of (batch_size/2*batch_size, max_seq_len, hidden_size)\n"," # TODO(Alex): Add true bert model\n"," # Input: input_ids, input_masks, segment_ids all with shape (None, max_seq_len)\n"," # Output: a tensor with shape (None, max_seq_len, hidden_size)\n"," fake_bert_output = tf.expand_dims(tf.ones_like(\n"," input_ids, dtype=tf.float32), axis=-1)*tf.ones([1, 1, 768], dtype=tf.float32)\n"," max_seq_length = tf.shape(fake_bert_output)[-2]\n"," hidden_size = tf.shape(fake_bert_output)[-1]\n","\n"," bert_output = tf.reshape(\n"," fake_bert_output, (-1, 2, max_seq_length, hidden_size))\n"," return bert_output\n","\n","\n","class MedicalQAModelwithBert(tf.keras.Model):\n"," def __init__(\n"," self,\n"," hidden_size=768,\n"," dropout=0.2,\n"," residual=True,\n"," activation=tf.keras.layers.ReLU(),\n"," name=''):\n"," super(MedicalQAModelwithBert, self).__init__(name=name)\n"," self.biobert = BioBert()\n"," self.q_ffn_layer = FFN(\n"," hidden_size=hidden_size,\n"," dropout=dropout,\n"," residual=residual,\n"," activation=activation)\n"," self.a_ffn_layer = FFN(\n"," hidden_size=hidden_size,\n"," dropout=dropout,\n"," residual=residual,\n"," activation=activation)\n","\n"," def _avg_across_token(self, tensor):\n"," if tensor is not None:\n"," tensor = tf.reduce_mean(tensor, axis=1)\n"," return tensor\n","\n"," def call(self, inputs):\n","\n"," q_bert_embedding, a_bert_embedding = self.biobert(inputs)\n","\n"," # according to USE, the DAN network average embedding across tokens\n"," q_bert_embedding = self._avg_across_token(q_bert_embedding)\n"," a_bert_embedding = self._avg_across_token(a_bert_embedding)\n","\n"," q_embedding = self.q_ffn_layer(q_bert_embedding)\n"," a_embedding = self.a_ffn_layer(a_bert_embedding)\n","\n"," return tf.stack([q_embedding, a_embedding], axis=1)\n","\n"," \n"," \n","# def qa_pair_cross_entropy_loss(y_true, y_pred):\n","# y_true = tf.eye(tf.shape(y_pred)[0])\n","# q_embedding, a_embedding = tf.unstack(y_pred, axis=1)\n","# similarity_matrix = tf.matmul(\n","# q_embedding, a_embedding, transpose_b=True)\n","# similarity_matrix_logits = tf.math.sigmoid(similarity_matrix)\n","# return tf.keras.losses.categorical_crossentropy(y_true, similarity_matrix_logits, from_logits=True)\n","\n","def qa_pair_cross_entropy_loss(y_true, y_pred):\n"," y_true = tf.eye(tf.shape(y_pred)[0])\n"," q_embedding, a_embedding = tf.unstack(y_pred, axis=1)\n"," similarity_matrix = tf.matmul(\n"," a = q_embedding, b = a_embedding, transpose_b=True)\n"," similarity_matrix_softmaxed = tf.nn.softmax(similarity_matrix)\n"," K.print_tensor(similarity_matrix_softmaxed, message=\"similarity_matrix_softmaxed is: \")\n"," return tf.keras.losses.categorical_crossentropy(y_true, similarity_matrix_softmaxed, from_logits=False)\n","\n","# y_true = tf.reshape(tf.eye(tf.shape(y_pred)[0])*2-1, (-1,))\n","# q_embedding, a_embedding = tf.unstack(y_pred, axis=1)\n","# similarity_matrix = tf.nn.softmax(tf.matmul(\n","# q_embedding, a_embedding, transpose_b=True))\n","# similarity_vector = tf.reshape(similarity_matrix, (-1, 1))\n","# return tf.nn.softmax_cross_entropy_with_logits(similarity_vector, y_true)\n","\n","#to try, with and without softmax\n","# catagorical cross entropy vs binary cross entropy\n","#with and without sigmoid pre transformation\n","#1 layer vs 2 layer \n","\n","#prioritize what he said. so softmax, then catagorical vs binary \n"],"execution_count":0,"outputs":[]},{"metadata":{"id":"Op9nhWzEB-2V","colab_type":"code","colab":{}},"cell_type":"code","source":["# training config\n","batch_size = 64\n","num_epochs=35\n","learning_rate=0.0001\n","validation_split=0.2\n","shuffle_buffer=50000\n","prefetch=50000\n","data_path='/content/gdrive/My Drive/mqa_tf_record'\n","model_path = '/content/gdrive/My Drive/mqa_models/ffn_model_cross_entropy'"],"execution_count":0,"outputs":[]},{"metadata":{"id":"b7QrPxwVB_U2","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":1193},"outputId":"b8f4933e-bcf5-4512-df7a-f2cf5a25577e","executionInfo":{"status":"ok","timestamp":1556155849363,"user_tz":420,"elapsed":3419840,"user":{"displayName":"Santosh Gupta","photoUrl":"","userId":"14163791406641115409"}}},"cell_type":"code","source":[" d = create_dataset_for_ffn(\n"," data_path, batch_size=batch_size, shuffle_buffer=shuffle_buffer, prefetch=prefetch)\n"," eval_d = create_dataset_for_ffn(\n"," data_path, batch_size=batch_size, mode='eval')\n"," medical_qa_model = MedicalQAModel()\n"," optimizer = tf.keras.optimizers.Adam(lr=learning_rate)\n"," medical_qa_model.compile(\n"," optimizer=optimizer, loss=qa_pair_cross_entropy_loss)\n","\n"," epochs = num_epochs\n"," loss_metric = tf.keras.metrics.Mean()\n","\n"," history = medical_qa_model.fit(d, epochs=epochs, validation_data=eval_d)\n"],"execution_count":58,"outputs":[{"output_type":"stream","text":["Epoch 1/35\n","3349/3349 [==============================] - 112s 34ms/step - loss: 8.0786 - val_loss: 0.0000e+00\n","Epoch 2/35\n","3349/3349 [==============================] - 98s 29ms/step - loss: 5.1430 - val_loss: 4.0929\n","Epoch 3/35\n","3349/3349 [==============================] - 100s 30ms/step - loss: 4.5094 - val_loss: 4.0164\n","Epoch 4/35\n","3349/3349 [==============================] - 98s 29ms/step - loss: 4.1240 - val_loss: 3.7529\n","Epoch 5/35\n","3349/3349 [==============================] - 97s 29ms/step - loss: 3.8768 - val_loss: 3.8079\n","Epoch 6/35\n","3349/3349 [==============================] - 98s 29ms/step - loss: 3.6785 - val_loss: 3.5953\n","Epoch 7/35\n","3349/3349 [==============================] - 97s 29ms/step - loss: 3.5199 - val_loss: 3.4747\n","Epoch 8/35\n","3349/3349 [==============================] - 98s 29ms/step - loss: 3.3815 - val_loss: 3.4318\n","Epoch 9/35\n","3349/3349 [==============================] - 98s 29ms/step - loss: 3.2739 - val_loss: 3.3712\n","Epoch 10/35\n","3349/3349 [==============================] - 97s 29ms/step - loss: 3.1726 - val_loss: 3.2709\n","Epoch 11/35\n","3349/3349 [==============================] - 97s 29ms/step - loss: 3.0931 - val_loss: 3.3439\n","Epoch 12/35\n","3349/3349 [==============================] - 98s 29ms/step - loss: 3.0028 - val_loss: 3.2604\n","Epoch 13/35\n","3349/3349 [==============================] - 96s 29ms/step - loss: 2.9343 - val_loss: 3.1457\n","Epoch 14/35\n","3349/3349 [==============================] - 97s 29ms/step - loss: 2.8695 - val_loss: 3.1974\n","Epoch 15/35\n","3349/3349 [==============================] - 97s 29ms/step - loss: 2.8025 - val_loss: 3.1653\n","Epoch 16/35\n","3349/3349 [==============================] - 98s 29ms/step - loss: 2.7489 - val_loss: 3.1592\n","Epoch 17/35\n","3349/3349 [==============================] - 97s 29ms/step - loss: 2.7124 - val_loss: 3.0790\n","Epoch 18/35\n","3349/3349 [==============================] - 97s 29ms/step - loss: 2.6590 - val_loss: 3.0410\n","Epoch 19/35\n","3349/3349 [==============================] - 97s 29ms/step - loss: 2.6165 - val_loss: 2.9715\n","Epoch 20/35\n","3349/3349 [==============================] - 98s 29ms/step - loss: 2.5695 - val_loss: 2.9798\n","Epoch 21/35\n","3349/3349 [==============================] - 98s 29ms/step - loss: 2.5289 - val_loss: 2.9825\n","Epoch 22/35\n","3349/3349 [==============================] - 97s 29ms/step - loss: 2.4915 - val_loss: 2.9491\n","Epoch 23/35\n","3349/3349 [==============================] - 97s 29ms/step - loss: 2.4618 - val_loss: 2.9039\n","Epoch 24/35\n","3349/3349 [==============================] - 97s 29ms/step - loss: 2.4194 - val_loss: 2.8728\n","Epoch 25/35\n","3349/3349 [==============================] - 97s 29ms/step - loss: 2.3888 - val_loss: 2.8882\n","Epoch 26/35\n","3349/3349 [==============================] - 97s 29ms/step - loss: 2.3528 - val_loss: 2.9230\n","Epoch 27/35\n","3349/3349 [==============================] - 97s 29ms/step - loss: 2.3325 - val_loss: 2.9123\n","Epoch 28/35\n","3349/3349 [==============================] - 97s 29ms/step - loss: 2.2968 - val_loss: 2.9179\n","Epoch 29/35\n","3349/3349 [==============================] - 97s 29ms/step - loss: 2.2785 - val_loss: 2.8322\n","Epoch 30/35\n","3349/3349 [==============================] - 95s 28ms/step - loss: 2.2459 - val_loss: 2.8944\n","Epoch 31/35\n","3349/3349 [==============================] - 95s 28ms/step - loss: 2.2196 - val_loss: 2.9340\n","Epoch 32/35\n","3349/3349 [==============================] - 96s 29ms/step - loss: 2.1883 - val_loss: 2.8144\n","Epoch 33/35\n","3349/3349 [==============================] - 95s 28ms/step - loss: 2.1685 - val_loss: 2.8969\n","Epoch 34/35\n","3349/3349 [==============================] - 95s 28ms/step - loss: 2.1532 - val_loss: 2.7532\n","Epoch 35/35\n","3349/3349 [==============================] - 95s 28ms/step - loss: 2.1271 - val_loss: 2.8530\n"],"name":"stdout"}]},{"metadata":{"id":"1tTRDVo2wBQd","colab_type":"code","colab":{}},"cell_type":"code","source":["30, 31, 26, 12"],"execution_count":0,"outputs":[]},{"metadata":{"id":"7jK3IN68Vwh1","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"8347608d-d0bc-40bd-b9d4-ceb1becf5990","executionInfo":{"status":"ok","timestamp":1556152159445,"user_tz":420,"elapsed":3734,"user":{"displayName":"Santosh Gupta","photoUrl":"","userId":"14163791406641115409"}}},"cell_type":"code","source":["print(history.history.keys())"],"execution_count":50,"outputs":[{"output_type":"stream","text":["dict_keys(['loss', 'val_loss'])\n"],"name":"stdout"}]},{"metadata":{"id":"_5UiYSV-VtKm","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":574},"outputId":"4bc2017a-6a1f-4cd7-f18e-3362c891d212","executionInfo":{"status":"ok","timestamp":1556155870312,"user_tz":420,"elapsed":5342,"user":{"displayName":"Santosh Gupta","photoUrl":"","userId":"14163791406641115409"}}},"cell_type":"code","source":["import matplotlib.pyplot as plt\n","# summarize history for accuracy\n","# plt.plot(history.history['acc'])\n","# plt.plot(history.history['val_acc'])\n","plt.title('model accuracy')\n","plt.ylabel('accuracy')\n","plt.xlabel('epoch')\n","plt.legend(['train', 'test'], loc='upper left')\n","plt.show()\n","# summarize history for loss\n","plt.plot(history.history['loss'])\n","plt.plot(history.history['val_loss'])\n","plt.title('model loss')\n","plt.ylabel('loss')\n","plt.xlabel('epoch')\n","plt.legend(['train', 'test'], loc='upper left')\n","plt.show()"],"execution_count":61,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[]}},{"output_type":"display_data","data":{"image/png":"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\nRK5CYII=\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[]}}]},{"metadata":{"id":"4ouPl_VSHABc","colab_type":"code","colab":{}},"cell_type":"code","source":["medical_qa_model.save_weights(model_path)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"Nl6zuquoJQJ1","colab_type":"code","colab":{}},"cell_type":"code","source":["model_path2 = '/content/gdrive/My Drive/mqa_models/ffn_model_cross_entropy.ckpt'\n","\n","checkpoint = tf.keras.callbacks.ModelCheckpoint(model_path2, monitor='loss', verbose=1, save_best_only=True, mode='min')"],"execution_count":0,"outputs":[]},{"metadata":{"id":"moMsMhcBJnMj","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":454},"outputId":"4c6e61a7-50a5-463c-9770-18b30c4987d7"},"cell_type":"code","source":["history = medical_qa_model.fit(d, epochs=20, validation_data=eval_d, callbacks=[checkpoint])"],"execution_count":0,"outputs":[{"output_type":"stream","text":["Epoch 1/20\n"," 3349/Unknown - 88s 26ms/step - loss: 2.0000\n","Epoch 00001: loss improved from inf to 1.99994, saving model to /content/gdrive/My Drive/mqa_models/ffn_model_cross_entropy.ckpt\n","3349/3349 [==============================] - 97s 29ms/step - loss: 2.0000 - val_loss: 0.0000e+00\n","Epoch 2/20\n","3346/3349 [============================>.] - ETA: 0s - loss: 1.9841\n","Epoch 00002: loss improved from 1.99994 to 1.98461, saving model to /content/gdrive/My Drive/mqa_models/ffn_model_cross_entropy.ckpt\n","3349/3349 [==============================] - 85s 25ms/step - loss: 1.9846 - val_loss: 2.7002\n","Epoch 3/20\n","3347/3349 [============================>.] - ETA: 0s - loss: 1.9696\n","Epoch 00003: loss improved from 1.98461 to 1.96986, saving model to /content/gdrive/My Drive/mqa_models/ffn_model_cross_entropy.ckpt\n","3349/3349 [==============================] - 86s 26ms/step - loss: 1.9698 - val_loss: 2.6948\n","Epoch 4/20\n","3347/3349 [============================>.] - ETA: 0s - loss: 1.9521\n","Epoch 00004: loss improved from 1.96986 to 1.95240, saving model to /content/gdrive/My Drive/mqa_models/ffn_model_cross_entropy.ckpt\n","3349/3349 [==============================] - 85s 25ms/step - loss: 1.9524 - val_loss: 2.6883\n","Epoch 5/20\n","3347/3349 [============================>.] - ETA: 0s - loss: 1.9342\n","Epoch 00005: loss improved from 1.95240 to 1.93438, saving model to /content/gdrive/My Drive/mqa_models/ffn_model_cross_entropy.ckpt\n","3349/3349 [==============================] - 86s 26ms/step - loss: 1.9344 - val_loss: 2.6770\n","Epoch 6/20\n","3347/3349 [============================>.] - ETA: 0s - loss: 1.9191\n","Epoch 00006: loss improved from 1.93438 to 1.91929, saving model to /content/gdrive/My Drive/mqa_models/ffn_model_cross_entropy.ckpt\n","3349/3349 [==============================] - 86s 26ms/step - loss: 1.9193 - val_loss: 2.7460\n","Epoch 7/20\n"," 344/3349 [==>...........................] - ETA: 1:40 - loss: 1.9665"],"name":"stdout"}]},{"metadata":{"id":"5USYuFtRF2Uo","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":474},"outputId":"a2e798af-c2c0-45ea-b644-7f56ea378f4f","executionInfo":{"status":"error","timestamp":1556156245150,"user_tz":420,"elapsed":2929,"user":{"displayName":"Santosh Gupta","photoUrl":"","userId":"14163791406641115409"}}},"cell_type":"code","source":["medical_qa_model2 = tf.keras.models.load_model(model_path)\n","checkpoint = ModelCheckpoint(model_path, monitor='loss', verbose=1, save_best_only=True, mode='min')\n","callbacks_list = [checkpoint]\n","history = medical_qa_model2.fit(d, epochs=epochs, validation_data=eval_d, callbacks=callbacks_list)\n","\n"],"execution_count":65,"outputs":[{"output_type":"error","ename":"OSError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mOSError\u001b[0m Traceback (most recent call last)","\u001b[0;32m<ipython-input-65-e82f54e294c3>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmedical_qa_model2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkeras\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodels\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload_model\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel_path\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mcheckpoint\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mModelCheckpoint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel_path\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmonitor\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'loss'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mverbose\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msave_best_only\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'min'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mcallbacks_list\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mcheckpoint\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mhistory\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmedical_qa_model2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0md\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mepochs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mepochs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalidation_data\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0meval_d\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcallbacks\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcallbacks_list\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/saving/hdf5_format.py\u001b[0m in \u001b[0;36mload_model\u001b[0;34m(filepath, custom_objects, compile)\u001b[0m\n\u001b[1;32m 201\u001b[0m \u001b[0mopened_new_file\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mh5py\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mFile\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 202\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mopened_new_file\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 203\u001b[0;31m \u001b[0mf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mh5py\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mFile\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'r'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 204\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 205\u001b[0m \u001b[0mf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfilepath\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.6/dist-packages/h5py/_hl/files.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, name, mode, driver, libver, userblock_size, swmr, **kwds)\u001b[0m\n\u001b[1;32m 310\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mphil\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 311\u001b[0m \u001b[0mfapl\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmake_fapl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdriver\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlibver\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 312\u001b[0;31m \u001b[0mfid\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmake_fid\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0muserblock_size\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfapl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mswmr\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mswmr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 313\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 314\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mswmr_support\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.6/dist-packages/h5py/_hl/files.py\u001b[0m in \u001b[0;36mmake_fid\u001b[0;34m(name, mode, userblock_size, fapl, fcpl, swmr)\u001b[0m\n\u001b[1;32m 140\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mswmr\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mswmr_support\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 141\u001b[0m \u001b[0mflags\u001b[0m \u001b[0;34m|=\u001b[0m \u001b[0mh5f\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mACC_SWMR_READ\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 142\u001b[0;31m \u001b[0mfid\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mh5f\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mflags\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfapl\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfapl\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 143\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mmode\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'r+'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 144\u001b[0m \u001b[0mfid\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mh5f\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mh5f\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mACC_RDWR\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfapl\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfapl\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32mh5py/_objects.pyx\u001b[0m in \u001b[0;36mh5py._objects.with_phil.wrapper\u001b[0;34m()\u001b[0m\n","\u001b[0;32mh5py/_objects.pyx\u001b[0m in \u001b[0;36mh5py._objects.with_phil.wrapper\u001b[0;34m()\u001b[0m\n","\u001b[0;32mh5py/h5f.pyx\u001b[0m in \u001b[0;36mh5py.h5f.open\u001b[0;34m()\u001b[0m\n","\u001b[0;31mOSError\u001b[0m: Unable to open file (unable to open file: name = '/content/gdrive/My Drive/mqa_models/ffn_model_cross_entropy', errno = 2, error message = 'No such file or directory', flags = 0, o_flags = 0)"]}]},{"metadata":{"id":"LVFOo7PJGZNh","colab_type":"code","colab":{}},"cell_type":"code","source":[""],"execution_count":0,"outputs":[]}]}