From 43cd81bd64880af6492b94d644538df32bcf4e88 Mon Sep 17 00:00:00 2001 From: Raghuram Subramani Date: Mon, 23 Jan 2023 14:14:07 +0530 Subject: upload files --- .gitignore | 1 + GenerateShakespeare.ipynb | 1 + client.py | 33 +++++++++++++++++++++++++++++++++ convert.sh | 2 ++ jsmodel/group1-shard1of4.bin | Bin 0 -> 4194304 bytes jsmodel/group1-shard2of4.bin | Bin 0 -> 4194304 bytes jsmodel/group1-shard3of4.bin | Bin 0 -> 4194304 bytes jsmodel/group1-shard4of4.bin | Bin 0 -> 3491076 bytes jsmodel/model.json | 1 + model.h5 | Bin 0 -> 16093616 bytes web/favicon.ico | 0 web/index.html | 14 ++++++++++++++ web/jsmodel/group1-shard1of4.bin | Bin 0 -> 4194304 bytes web/jsmodel/group1-shard2of4.bin | Bin 0 -> 4194304 bytes web/jsmodel/group1-shard3of4.bin | Bin 0 -> 4194304 bytes web/jsmodel/group1-shard4of4.bin | Bin 0 -> 3491076 bytes web/jsmodel/model.json | 1 + web/script.js | 27 +++++++++++++++++++++++++++ 18 files changed, 80 insertions(+) create mode 100644 .gitignore create mode 100644 GenerateShakespeare.ipynb create mode 100644 client.py create mode 100755 convert.sh create mode 100644 jsmodel/group1-shard1of4.bin create mode 100644 jsmodel/group1-shard2of4.bin create mode 100644 jsmodel/group1-shard3of4.bin create mode 100644 jsmodel/group1-shard4of4.bin create mode 100644 jsmodel/model.json create mode 100644 model.h5 create mode 100644 web/favicon.ico create mode 100644 web/index.html create mode 100644 web/jsmodel/group1-shard1of4.bin create mode 100644 web/jsmodel/group1-shard2of4.bin create mode 100644 web/jsmodel/group1-shard3of4.bin create mode 100644 web/jsmodel/group1-shard4of4.bin create mode 100644 web/jsmodel/model.json create mode 100644 web/script.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f7275bb --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +venv/ diff --git a/GenerateShakespeare.ipynb b/GenerateShakespeare.ipynb new file mode 100644 index 0000000..e49c4c8 --- /dev/null +++ b/GenerateShakespeare.ipynb @@ -0,0 +1 @@ +{"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":"!pip install pandas","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"aOX6ge672GEp","outputId":"30bf145d-ffbf-476a-cc7b-3ee230c12787","execution":{"iopub.status.busy":"2023-01-23T05:42:10.084468Z","iopub.execute_input":"2023-01-23T05:42:10.085270Z","iopub.status.idle":"2023-01-23T05:42:17.352790Z","shell.execute_reply.started":"2023-01-23T05:42:10.085176Z","shell.execute_reply":"2023-01-23T05:42:17.351904Z"},"trusted":true},"execution_count":1,"outputs":[{"name":"stdout","text":"Requirement already satisfied: pandas in /opt/conda/lib/python3.7/site-packages (1.2.5)\nRequirement already satisfied: python-dateutil>=2.7.3 in /opt/conda/lib/python3.7/site-packages (from pandas) (2.8.0)\nRequirement already satisfied: pytz>=2017.3 in /opt/conda/lib/python3.7/site-packages (from pandas) (2021.1)\nRequirement already satisfied: numpy>=1.16.5 in /opt/conda/lib/python3.7/site-packages (from pandas) (1.19.5)\nRequirement already satisfied: six>=1.5 in /opt/conda/lib/python3.7/site-packages (from python-dateutil>=2.7.3->pandas) (1.15.0)\n\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\n","output_type":"stream"}]},{"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-23T05:42:17.354943Z","iopub.execute_input":"2023-01-23T05:42:17.355430Z","iopub.status.idle":"2023-01-23T05:42:18.977205Z","shell.execute_reply.started":"2023-01-23T05:42:17.355391Z","shell.execute_reply":"2023-01-23T05:42:18.976489Z"},"trusted":true},"execution_count":2,"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-23T05:42:18.978748Z","iopub.execute_input":"2023-01-23T05:42:18.979065Z","iopub.status.idle":"2023-01-23T05:42:19.037511Z","shell.execute_reply.started":"2023-01-23T05:42:18.979027Z","shell.execute_reply":"2023-01-23T05:42:19.036718Z"},"trusted":true},"execution_count":3,"outputs":[{"name":"stdout","text":"Num GPUs: 1\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-23T05:42:19.040265Z","iopub.execute_input":"2023-01-23T05:42:19.040796Z","iopub.status.idle":"2023-01-23T05:42:19.050689Z","shell.execute_reply.started":"2023-01-23T05:42:19.040757Z","shell.execute_reply":"2023-01-23T05:42:19.050109Z"},"trusted":true},"execution_count":4,"outputs":[{"name":"stdout","text":"First 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-23T05:42:19.051989Z","iopub.execute_input":"2023-01-23T05:42:19.052463Z","iopub.status.idle":"2023-01-23T05:42:19.072183Z","shell.execute_reply.started":"2023-01-23T05:42:19.052428Z","shell.execute_reply":"2023-01-23T05:42:19.071259Z"},"trusted":true},"execution_count":5,"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-23T05:42:19.073666Z","iopub.execute_input":"2023-01-23T05:42:19.073919Z","iopub.status.idle":"2023-01-23T05:42:19.086841Z","shell.execute_reply.started":"2023-01-23T05:42:19.073888Z","shell.execute_reply":"2023-01-23T05:42:19.086002Z"},"trusted":true},"execution_count":6,"outputs":[{"execution_count":6,"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-23T05:42:19.088184Z","iopub.execute_input":"2023-01-23T05:42:19.088453Z","iopub.status.idle":"2023-01-23T05:42:19.096843Z","shell.execute_reply.started":"2023-01-23T05:42:19.088423Z","shell.execute_reply":"2023-01-23T05:42:19.095950Z"},"trusted":true},"execution_count":7,"outputs":[{"execution_count":7,"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-23T05:53:38.925436Z","iopub.execute_input":"2023-01-23T05:53:38.925714Z","iopub.status.idle":"2023-01-23T05:53:39.188346Z","shell.execute_reply.started":"2023-01-23T05:53:38.925686Z","shell.execute_reply":"2023-01-23T05:53:39.186962Z"},"trusted":true},"execution_count":42,"outputs":[{"name":"stdout","text":"Model: \"sequential_3\"\n_________________________________________________________________\nLayer (type) Output Shape Param # \n=================================================================\nembedding_3 (Embedding) (1, None, 256) 16640 \n_________________________________________________________________\ngru_3 (GRU) (1, None, 1024) 3938304 \n_________________________________________________________________\ndense_3 (Dense) (1, None, 65) 66625 \n=================================================================\nTotal params: 4,021,569\nTrainable params: 4,021,569\nNon-trainable params: 0\n_________________________________________________________________\n","output_type":"stream"}]},{"cell_type":"code","source":"model.save('model.h5')","metadata":{"execution":{"iopub.status.busy":"2023-01-23T05:53:40.113042Z","iopub.execute_input":"2023-01-23T05:53:40.113336Z","iopub.status.idle":"2023-01-23T05:53:40.163870Z","shell.execute_reply.started":"2023-01-23T05:53:40.113305Z","shell.execute_reply":"2023-01-23T05:53:40.162900Z"},"trusted":true},"execution_count":43,"outputs":[]},{"cell_type":"code","source":"model = tf.keras.models.load_model('model.h5')","metadata":{"execution":{"iopub.status.busy":"2023-01-23T05:55:04.484716Z","iopub.execute_input":"2023-01-23T05:55:04.484998Z","iopub.status.idle":"2023-01-23T05:55:04.716204Z","shell.execute_reply.started":"2023-01-23T05:55:04.484967Z","shell.execute_reply":"2023-01-23T05:55:04.715394Z"},"trusted":true},"execution_count":51,"outputs":[]},{"cell_type":"code","source":"def generate_text(model, start_string=u'ROMEO:', num_generate=1000, temperature=0.7):\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 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-23T05:59:17.611210Z","iopub.execute_input":"2023-01-23T05:59:17.611527Z","iopub.status.idle":"2023-01-23T05:59:17.618325Z","shell.execute_reply.started":"2023-01-23T05:59:17.611490Z","shell.execute_reply":"2023-01-23T05:59:17.617438Z"},"trusted":true},"execution_count":58,"outputs":[]},{"cell_type":"code","source":"print(generate_text(model))","metadata":{"execution":{"iopub.status.busy":"2023-01-23T05:59:17.959537Z","iopub.execute_input":"2023-01-23T05:59:17.959774Z","iopub.status.idle":"2023-01-23T05:59:21.962224Z","shell.execute_reply.started":"2023-01-23T05:59:17.959748Z","shell.execute_reply":"2023-01-23T05:59:21.961442Z"},"trusted":true},"execution_count":59,"outputs":[{"name":"stdout","text":"ROMEO:\nWhy, many, sir, what place can witness and the man of some unreverent sinking.\nThe news to say to me, he brings the men of Greece\nAnd bear the self-same tongue; as at the store of men,\nThe queen is coming.\n\nPERDITA:\nSo will, I do not\nThus proclaim us from our hands whose wars death is a devil.\n\nLADY MOPt not from him;\nBut thou the king, post to thy beauty,\nAnd made Verona's sake, Sir John, who being so happy?\n\nThird Servant:\nThat is the best of our friends with silence,\nOr else new form'd him.\n\nSICINIUS:\nShall lie alone;\nLest I rest to say, Signior Prince of Warwick,\nAnd he shall she the belly sir.\n\nCORIOLANUS:\nAway!\n\nSecond Servant:\nOr seeming, COMINIUS:\nFor my peace is mine.\n\nKING RICHARD II:\nWhy straight did I think the weakest world,\nThat we will plant so wide as aught and hazard of the father's voice,\nThat at the boy, if mine own carver man: if she have recourse us.\n\nMessenger:\nShe whom I love.\n\nSecond Murderer:\nO sir, you were possess'd, when thou camest here in the\nThe truth, o\n","output_type":"stream"}]}]} \ No newline at end of file diff --git a/client.py b/client.py new file mode 100644 index 0000000..7b14701 --- /dev/null +++ b/client.py @@ -0,0 +1,33 @@ +import os +os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' + +import tensorflow as tf + +model = tf.keras.models.load_model('model.h5', compile=False) + +char2idx = {'\n': 0, ' ': 1, '!': 2, '$': 3, '&': 4, "'": 5, ',': 6, '-': 7, '.': 8, '3': 9, ':': 10, ';': 11, '?': 12, 'A': 13, 'B': 14, 'C': 15, 'D': 16, 'E': 17, 'F': 18, 'G': 19, 'H': 20, 'I': 21, 'J': 22, 'K': 23, 'L': 24, 'M': 25, 'N': 26, 'O': 27, 'P': 28, 'Q': 29, 'R': 30, 'S': 31, 'T': 32, 'U': 33, 'V': 34, 'W': 35, 'X': 36, 'Y': 37, 'Z': 38, 'a': 39, 'b': 40, 'c': 41, 'd': 42, 'e': 43, 'f': 44, 'g': 45, 'h': 46, 'i': 47, 'j': 48, 'k': 49, 'l': 50, 'm': 51, 'n': 52, 'o': 53, 'p': 54, 'q': 55, 'r': 56, 's': 57, 't': 58, 'u': 59, 'v': 60, 'w': 61, 'x': 62, 'y': 63, 'z': 64} +idx2char = ['\n', ' ', '!', '$', '&', "'", ',', '-', '.', '3', ':', ';', '?', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] + +def generate_text(model, start_string=u'ROMEO:', num_generate=1000, temperature=0.7): + num_generate = 1000 + + input_eval = [char2idx[s] for s in start_string] + input_eval = tf.expand_dims(input_eval, 0) + + text_generated = [] + + temperature = 0.7 + + model.reset_states() + for i in range(num_generate): + predictions = model(input_eval) + predictions = tf.squeeze(predictions, 0) + predictions = predictions / temperature + predicted_id = tf.random.categorical(predictions, num_samples=1)[-1,0].numpy() + print(predicted_id) + input_eval = tf.expand_dims([predicted_id], 0) + text_generated.append(idx2char[predicted_id]) + + return (start_string + ''.join(text_generated)) + +print(generate_text(model)) diff --git a/convert.sh b/convert.sh new file mode 100755 index 0000000..b8f780d --- /dev/null +++ b/convert.sh @@ -0,0 +1,2 @@ +#!/bin/bash +tensorflowjs_converter --input_format keras model.h5 jsmodel diff --git a/jsmodel/group1-shard1of4.bin b/jsmodel/group1-shard1of4.bin new file mode 100644 index 0000000..50f742e Binary files /dev/null and b/jsmodel/group1-shard1of4.bin differ diff --git a/jsmodel/group1-shard2of4.bin b/jsmodel/group1-shard2of4.bin new file mode 100644 index 0000000..f60c458 Binary files /dev/null and b/jsmodel/group1-shard2of4.bin differ diff --git a/jsmodel/group1-shard3of4.bin b/jsmodel/group1-shard3of4.bin new file mode 100644 index 0000000..e682033 Binary files /dev/null and b/jsmodel/group1-shard3of4.bin differ diff --git a/jsmodel/group1-shard4of4.bin b/jsmodel/group1-shard4of4.bin new file mode 100644 index 0000000..200da57 Binary files /dev/null and b/jsmodel/group1-shard4of4.bin differ diff --git a/jsmodel/model.json b/jsmodel/model.json new file mode 100644 index 0000000..0de300d --- /dev/null +++ b/jsmodel/model.json @@ -0,0 +1 @@ +{"format": "layers-model", "generatedBy": "keras v2.4.0", "convertedBy": "TensorFlow.js Converter v4.2.0", "modelTopology": {"keras_version": "2.4.0", "backend": "tensorflow", "model_config": {"class_name": "Sequential", "config": {"name": "sequential_1", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": [1, null], "dtype": "float32", "sparse": false, "ragged": false, "name": "embedding_1_input"}}, {"class_name": "Embedding", "config": {"name": "embedding_1", "trainable": true, "batch_input_shape": [1, null], "dtype": "float32", "input_dim": 65, "output_dim": 256, "embeddings_initializer": {"class_name": "RandomUniform", "config": {"minval": -0.05, "maxval": 0.05, "seed": null}}, "embeddings_regularizer": null, "activity_regularizer": null, "embeddings_constraint": null, "mask_zero": false, "input_length": null}}, {"class_name": "GRU", "config": {"name": "gru_1", "trainable": true, "dtype": "float32", "return_sequences": true, "return_state": false, "go_backwards": false, "stateful": true, "unroll": false, "time_major": false, "units": 1024, "activation": "tanh", "recurrent_activation": "sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "recurrent_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "recurrent_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "recurrent_constraint": null, "bias_constraint": null, "dropout": 0.0, "recurrent_dropout": 0.0, "implementation": 2, "reset_after": false}}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 65, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}]}}}, "weightsManifest": [{"paths": ["group1-shard1of4.bin", "group1-shard2of4.bin", "group1-shard3of4.bin", "group1-shard4of4.bin"], "weights": [{"name": "dense_1/kernel", "shape": [1024, 65], "dtype": "float32"}, {"name": "dense_1/bias", "shape": [65], "dtype": "float32"}, {"name": "embedding_1/embeddings", "shape": [65, 256], "dtype": "float32"}, {"name": "gru_1/gru_cell_1/kernel", "shape": [256, 3072], "dtype": "float32"}, {"name": "gru_1/gru_cell_1/recurrent_kernel", "shape": [1024, 3072], "dtype": "float32"}, {"name": "gru_1/gru_cell_1/bias", "shape": [3072], "dtype": "float32"}]}]} \ No newline at end of file diff --git a/model.h5 b/model.h5 new file mode 100644 index 0000000..fa63950 Binary files /dev/null and b/model.h5 differ diff --git a/web/favicon.ico b/web/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..3fcc91d --- /dev/null +++ b/web/index.html @@ -0,0 +1,14 @@ + + + + + + + MyApp + + + +

Hello

+ + + diff --git a/web/jsmodel/group1-shard1of4.bin b/web/jsmodel/group1-shard1of4.bin new file mode 100644 index 0000000..50f742e Binary files /dev/null and b/web/jsmodel/group1-shard1of4.bin differ diff --git a/web/jsmodel/group1-shard2of4.bin b/web/jsmodel/group1-shard2of4.bin new file mode 100644 index 0000000..f60c458 Binary files /dev/null and b/web/jsmodel/group1-shard2of4.bin differ diff --git a/web/jsmodel/group1-shard3of4.bin b/web/jsmodel/group1-shard3of4.bin new file mode 100644 index 0000000..e682033 Binary files /dev/null and b/web/jsmodel/group1-shard3of4.bin differ diff --git a/web/jsmodel/group1-shard4of4.bin b/web/jsmodel/group1-shard4of4.bin new file mode 100644 index 0000000..200da57 Binary files /dev/null and b/web/jsmodel/group1-shard4of4.bin differ diff --git a/web/jsmodel/model.json b/web/jsmodel/model.json new file mode 100644 index 0000000..0de300d --- /dev/null +++ b/web/jsmodel/model.json @@ -0,0 +1 @@ +{"format": "layers-model", "generatedBy": "keras v2.4.0", "convertedBy": "TensorFlow.js Converter v4.2.0", "modelTopology": {"keras_version": "2.4.0", "backend": "tensorflow", "model_config": {"class_name": "Sequential", "config": {"name": "sequential_1", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": [1, null], "dtype": "float32", "sparse": false, "ragged": false, "name": "embedding_1_input"}}, {"class_name": "Embedding", "config": {"name": "embedding_1", "trainable": true, "batch_input_shape": [1, null], "dtype": "float32", "input_dim": 65, "output_dim": 256, "embeddings_initializer": {"class_name": "RandomUniform", "config": {"minval": -0.05, "maxval": 0.05, "seed": null}}, "embeddings_regularizer": null, "activity_regularizer": null, "embeddings_constraint": null, "mask_zero": false, "input_length": null}}, {"class_name": "GRU", "config": {"name": "gru_1", "trainable": true, "dtype": "float32", "return_sequences": true, "return_state": false, "go_backwards": false, "stateful": true, "unroll": false, "time_major": false, "units": 1024, "activation": "tanh", "recurrent_activation": "sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "recurrent_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "recurrent_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "recurrent_constraint": null, "bias_constraint": null, "dropout": 0.0, "recurrent_dropout": 0.0, "implementation": 2, "reset_after": false}}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 65, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}]}}}, "weightsManifest": [{"paths": ["group1-shard1of4.bin", "group1-shard2of4.bin", "group1-shard3of4.bin", "group1-shard4of4.bin"], "weights": [{"name": "dense_1/kernel", "shape": [1024, 65], "dtype": "float32"}, {"name": "dense_1/bias", "shape": [65], "dtype": "float32"}, {"name": "embedding_1/embeddings", "shape": [65, 256], "dtype": "float32"}, {"name": "gru_1/gru_cell_1/kernel", "shape": [256, 3072], "dtype": "float32"}, {"name": "gru_1/gru_cell_1/recurrent_kernel", "shape": [1024, 3072], "dtype": "float32"}, {"name": "gru_1/gru_cell_1/bias", "shape": [3072], "dtype": "float32"}]}]} \ No newline at end of file diff --git a/web/script.js b/web/script.js new file mode 100644 index 0000000..07fdd6b --- /dev/null +++ b/web/script.js @@ -0,0 +1,27 @@ +async function generate_text(model, idx2char, char2idx, start_string = 'ROMEO:', num_generate = 1000, temperature = 0.7) { + let input_eval = start_string.split('').map(s => char2idx[s]); + input_eval = tf.tensor1d(input_eval); + input_eval = tf.reshape(input_eval, [1, input_eval.size]); + + let text_generated = []; + + model.resetStates(); + for (let i = 0; i < num_generate; i++) { + let predictions = model.predict(input_eval); + predictions = predictions.squeeze(); + predictions = predictions.div(temperature); + let predicted_id = await tf.multinomial(predictions, 1).dataSync()[0]; + input_eval = tf.expandDims([predicted_id], 0); + text_generated.push(idx2char[predicted_id]); + console.log(i) + } + + console.log(text_generated.join('')); +} + +async function runModel() { + char2idx = {'\n': 0, ' ': 1, '!': 2, '$': 3, '&': 4, "'": 5, ',': 6, '-': 7, '.': 8, '3': 9, ':': 10, ';': 11, '?': 12, 'A': 13, 'B': 14, 'C': 15, 'D': 16, 'E': 17, 'F': 18, 'G': 19, 'H': 20, 'I': 21, 'J': 22, 'K': 23, 'L': 24, 'M': 25, 'N': 26, 'O': 27, 'P': 28, 'Q': 29, 'R': 30, 'S': 31, 'T': 32, 'U': 33, 'V': 34, 'W': 35, 'X': 36, 'Y': 37, 'Z': 38, 'a': 39, 'b': 40, 'c': 41, 'd': 42, 'e': 43, 'f': 44, 'g': 45, 'h': 46, 'i': 47, 'j': 48, 'k': 49, 'l': 50, 'm': 51, 'n': 52, 'o': 53, 'p': 54, 'q': 55, 'r': 56, 's': 57, 't': 58, 'u': 59, 'v': 60, 'w': 61, 'x': 62, 'y': 63, 'z': 64} + idx2char = ['\n', ' ', '!', '$', '&', "'", ',', '-', '.', '3', ':', ';', '?', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] + const model = await tf.loadLayersModel('/jsmodel/model.json'); + generate_text(model, idx2char, char2idx); +} -- cgit v1.2.3