{"metadata":{"accelerator":"GPU","colab":{"provenance":[]},"gpuClass":"standard","kernelspec":{"name":"python3","display_name":"Python 3","language":"python"},"language_info":{"name":"python","version":"3.7.10","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\nos.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'\n\nimport tensorflow as tf\n\nfrom tensorflow.keras import Sequential\nfrom tensorflow.keras.layers import Embedding, GRU, Dense\n\nimport numpy as np\nimport pandas as pd\nimport os\nimport time","metadata":{"id":"Qu46zrM8wlpM","execution":{"iopub.status.busy":"2023-01-23T09:37:02.077378Z","iopub.execute_input":"2023-01-23T09:37:02.077920Z","iopub.status.idle":"2023-01-23T09:37:07.764808Z","shell.execute_reply.started":"2023-01-23T09:37:02.077805Z","shell.execute_reply":"2023-01-23T09:37:07.763997Z"},"trusted":true},"execution_count":1,"outputs":[]},{"cell_type":"code","source":"physical_devices = tf.config.list_physical_devices('GPU')\nprint(\"Num GPUs:\", len(physical_devices))","metadata":{"execution":{"iopub.status.busy":"2023-01-23T09:37:07.766572Z","iopub.execute_input":"2023-01-23T09:37:07.766837Z","iopub.status.idle":"2023-01-23T09:37:08.041371Z","shell.execute_reply.started":"2023-01-23T09:37:07.766802Z","shell.execute_reply":"2023-01-23T09:37:08.040428Z"},"trusted":true},"execution_count":2,"outputs":[{"name":"stdout","text":"Num GPUs: 2\n","output_type":"stream"}]},{"cell_type":"code","source":"dataset_url = tf.keras.utils.get_file('shakespeare.txt', 'https://storage.googleapis.com/download.tensorflow.org/data/shakespeare.txt')\ndataset_text = open(dataset_url, 'rb').read().decode(encoding='UTF-8')\nprint(dataset_text[:1000])","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"v4gmrb8Yw4HQ","outputId":"8e1db03d-310d-49f6-c617-c1b46014618c","execution":{"iopub.status.busy":"2023-01-23T09:37:08.043029Z","iopub.execute_input":"2023-01-23T09:37:08.043606Z","iopub.status.idle":"2023-01-23T09:37:08.200353Z","shell.execute_reply.started":"2023-01-23T09:37:08.043564Z","shell.execute_reply":"2023-01-23T09:37:08.199665Z"},"trusted":true},"execution_count":3,"outputs":[{"name":"stdout","text":"Downloading data from https://storage.googleapis.com/download.tensorflow.org/data/shakespeare.txt\n1122304/1115394 [==============================] - 0s 0us/step\nFirst Citizen:\nBefore we proceed any further, hear me speak.\n\nAll:\nSpeak, speak.\n\nFirst Citizen:\nYou are all resolved rather to die than to famish?\n\nAll:\nResolved. resolved.\n\nFirst Citizen:\nFirst, you know Caius Marcius is chief enemy to the people.\n\nAll:\nWe know't, we know't.\n\nFirst Citizen:\nLet us kill him, and we'll have corn at our own price.\nIs't a verdict?\n\nAll:\nNo more talking on't; let it be done: away, away!\n\nSecond Citizen:\nOne word, good citizens.\n\nFirst Citizen:\nWe are accounted poor citizens, the patricians good.\nWhat authority surfeits on would relieve us: if they\nwould yield us but the superfluity, while it were\nwholesome, we might guess they relieved us humanely;\nbut they think we are too dear: the leanness that\nafflicts us, the object of our misery, is as an\ninventory to particularise their abundance; our\nsufferance is a gain to them Let us revenge this with\nour pikes, ere we become rakes: for the gods know I\nspeak this in hunger for bread, not in thirst for revenge.\n\n\n","output_type":"stream"}]},{"cell_type":"code","source":"vocab = sorted(set(dataset_text))\nprint(f'There are {len(vocab)} unique characters')","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"M6fUyb4exOYw","outputId":"275ea813-d767-4653-d33a-34cafca6032b","execution":{"iopub.status.busy":"2023-01-23T09:37:08.202817Z","iopub.execute_input":"2023-01-23T09:37:08.203077Z","iopub.status.idle":"2023-01-23T09:37:08.222579Z","shell.execute_reply.started":"2023-01-23T09:37:08.203044Z","shell.execute_reply":"2023-01-23T09:37:08.221616Z"},"trusted":true},"execution_count":4,"outputs":[{"name":"stdout","text":"There are 65 unique characters\n","output_type":"stream"}]},{"cell_type":"code","source":"char2idx = {char:index for index, char in enumerate(vocab)}\nchar2idx","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"C_v1hjDmxnxQ","outputId":"c24d469d-5bf1-4d2b-d7ed-97785a91c573","execution":{"iopub.status.busy":"2023-01-23T09:37:08.224008Z","iopub.execute_input":"2023-01-23T09:37:08.224567Z","iopub.status.idle":"2023-01-23T09:37:08.240003Z","shell.execute_reply.started":"2023-01-23T09:37:08.224533Z","shell.execute_reply":"2023-01-23T09:37:08.239251Z"},"trusted":true},"execution_count":5,"outputs":[{"execution_count":5,"output_type":"execute_result","data":{"text/plain":"{'\\n': 0,\n ' ': 1,\n '!': 2,\n '$': 3,\n '&': 4,\n \"'\": 5,\n ',': 6,\n '-': 7,\n '.': 8,\n '3': 9,\n ':': 10,\n ';': 11,\n '?': 12,\n 'A': 13,\n 'B': 14,\n 'C': 15,\n 'D': 16,\n 'E': 17,\n 'F': 18,\n 'G': 19,\n 'H': 20,\n 'I': 21,\n 'J': 22,\n 'K': 23,\n 'L': 24,\n 'M': 25,\n 'N': 26,\n 'O': 27,\n 'P': 28,\n 'Q': 29,\n 'R': 30,\n 'S': 31,\n 'T': 32,\n 'U': 33,\n 'V': 34,\n 'W': 35,\n 'X': 36,\n 'Y': 37,\n 'Z': 38,\n 'a': 39,\n 'b': 40,\n 'c': 41,\n 'd': 42,\n 'e': 43,\n 'f': 44,\n 'g': 45,\n 'h': 46,\n 'i': 47,\n 'j': 48,\n 'k': 49,\n 'l': 50,\n 'm': 51,\n 'n': 52,\n 'o': 53,\n 'p': 54,\n 'q': 55,\n 'r': 56,\n 's': 57,\n 't': 58,\n 'u': 59,\n 'v': 60,\n 'w': 61,\n 'x': 62,\n 'y': 63,\n 'z': 64}"},"metadata":{}}]},{"cell_type":"code","source":"idx2char = np.array(vocab)\nidx2char","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"G1AnsQToxwUG","outputId":"f0fce00b-d6b4-47b6-f061-4b8f7b2d6ab4","execution":{"iopub.status.busy":"2023-01-23T09:37:08.241241Z","iopub.execute_input":"2023-01-23T09:37:08.241510Z","iopub.status.idle":"2023-01-23T09:37:08.251158Z","shell.execute_reply.started":"2023-01-23T09:37:08.241479Z","shell.execute_reply":"2023-01-23T09:37:08.250471Z"},"trusted":true},"execution_count":6,"outputs":[{"execution_count":6,"output_type":"execute_result","data":{"text/plain":"array(['\\n', ' ', '!', '$', '&', \"'\", ',', '-', '.', '3', ':', ';', '?',\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',\n 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',\n 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'],\n dtype='"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"
","image/png":"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\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"code","source":"tf.train.latest_checkpoint(checkpoint_dir)\n\nmodel = build_model(vocab_size, embedding_dim, rnn_units, batch_size=1)\n\nmodel.load_weights(tf.train.latest_checkpoint(checkpoint_dir))\n\nmodel.build(tf.TensorShape([1, None]))\n\nmodel.summary()","metadata":{"execution":{"iopub.status.busy":"2023-01-23T10:22:52.438383Z","iopub.execute_input":"2023-01-23T10:22:52.438644Z","iopub.status.idle":"2023-01-23T10:22:52.570871Z","shell.execute_reply.started":"2023-01-23T10:22:52.438609Z","shell.execute_reply":"2023-01-23T10:22:52.569391Z"},"trusted":true},"execution_count":26,"outputs":[{"name":"stdout","text":"Model: \"sequential_1\"\n_________________________________________________________________\nLayer (type) Output Shape Param # \n=================================================================\nembedding_1 (Embedding) (1, None, 256) 16640 \n_________________________________________________________________\ngru_1 (GRU) (1, None, 1024) 3935232 \n_________________________________________________________________\ndense_1 (Dense) (1, None, 65) 66625 \n=================================================================\nTotal params: 4,018,497\nTrainable params: 4,018,497\nNon-trainable params: 0\n_________________________________________________________________\n","output_type":"stream"}]},{"cell_type":"code","source":"model.save('model.h5')","metadata":{"execution":{"iopub.status.busy":"2023-01-23T10:22:52.572355Z","iopub.execute_input":"2023-01-23T10:22:52.572613Z","iopub.status.idle":"2023-01-23T10:22:52.644489Z","shell.execute_reply.started":"2023-01-23T10:22:52.572578Z","shell.execute_reply":"2023-01-23T10:22:52.643697Z"},"trusted":true},"execution_count":27,"outputs":[]},{"cell_type":"code","source":"model = tf.keras.models.load_model('model.h5')","metadata":{"execution":{"iopub.status.busy":"2023-01-23T10:22:52.648346Z","iopub.execute_input":"2023-01-23T10:22:52.648569Z","iopub.status.idle":"2023-01-23T10:22:52.760377Z","shell.execute_reply.started":"2023-01-23T10:22:52.648544Z","shell.execute_reply":"2023-01-23T10:22:52.758744Z"},"trusted":true},"execution_count":28,"outputs":[]},{"cell_type":"code","source":"def generate_text(model, start_string=u'ROMEO:', num_generate=1000, temperature=0.7):\n num_generate = 1000\n\n input_eval = [char2idx[s] for s in start_string]\n input_eval = tf.expand_dims(input_eval, 0)\n\n text_generated = []\n\n temperature = 0.1\n\n model.reset_states()\n for i in range(num_generate):\n predictions = model(input_eval)\n predictions = tf.squeeze(predictions, 0)\n predictions = predictions / temperature\n predicted_id = tf.random.categorical(predictions, num_samples=1)[-1,0].numpy()\n input_eval = tf.expand_dims([predicted_id], 0)\n text_generated.append(idx2char[predicted_id])\n\n return (start_string + ''.join(text_generated))","metadata":{"execution":{"iopub.status.busy":"2023-01-23T10:22:52.762097Z","iopub.execute_input":"2023-01-23T10:22:52.762461Z","iopub.status.idle":"2023-01-23T10:22:52.778389Z","shell.execute_reply.started":"2023-01-23T10:22:52.762418Z","shell.execute_reply":"2023-01-23T10:22:52.775893Z"},"trusted":true},"execution_count":29,"outputs":[]},{"cell_type":"code","source":"print(generate_text(model))","metadata":{"execution":{"iopub.status.busy":"2023-01-23T10:22:52.779708Z","iopub.execute_input":"2023-01-23T10:22:52.780045Z","iopub.status.idle":"2023-01-23T10:22:59.250032Z","shell.execute_reply.started":"2023-01-23T10:22:52.780007Z","shell.execute_reply":"2023-01-23T10:22:59.249270Z"},"trusted":true},"execution_count":30,"outputs":[{"name":"stdout","text":"ROMEO:\nO, welcome, Oxford! for thee, lords\nWith all your every name is king: then if I would not--and be gone.\n\nROMEO:\nGive me a torch: I am pale as fill the sky\nThe shederers of your daughter by your servant.\n\nCAMILLO:\nThe swifter is an answer.\n\nPOLIXENES:\nAnd this we pardon me.\n\nGLOUCESTER:\n\nKING EDWARD IV:\nNow tell me, madam, do you love the day.\nBrother, we done deeds be not a fliet, though being all too full of wretched by their hates\nOf death to my disease; carries and sleep as heaven,\nSpuke him to his rudely suffering stuff,\nThat seest it with the sword of heaven so fierce\n\nPETRUCHIO:\nWhy, there is time removed by humour with the stars:\nThere is a slave, whom we have put in prison,\nReports, the Volsces with two several powers\nAre specially to be a dishonest person?\n\nLUCIO:\n'Cucullus non facit monachum:' honest in nothing\nbut that I am not Lucentio.\n\nGREMIO:\nThe Emperor of Russia,\nWhen nights are longest the time and call it not\nUSTEL:\nNow to London, To this sin we begin to us.\n\nHENRY \n","output_type":"stream"}]}]}