Skip to content

Instantly share code, notes, and snippets.

@miykael
Created February 9, 2021 16:25
Show Gist options
  • Save miykael/e37660ab7cb0f5869917f159a4e7111a to your computer and use it in GitHub Desktop.
Save miykael/e37660ab7cb0f5869917f159a4e7111a to your computer and use it in GitHub Desktop.
AIcrowd - challenge: Blitz 5 - Challenge 2: Text OCR
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "kGMGAOWjUPwg"
},
"source": [
"# (colab only) Setup AIcrowd to get data"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "ql_BbZQVT4rC",
"outputId": "113e26a4-8b29-4937-be68-fcabfbb37101"
},
"outputs": [],
"source": [
"!pip install git+https://gitlab.aicrowd.com/yoogottamk/aicrowd-cli.git\n",
"API_KEY = \"\"\"SECRET_KEY\"\"\"\n",
"!aicrowd login --api-key $API_KEY"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "D2_92NROUanS"
},
"outputs": [],
"source": [
"!aicrowd dataset download -c txtocr >/dev/null"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "w6MPgoGHUgKx",
"outputId": "f24546a0-d503-4fdd-8aab-9f15c90265ca"
},
"outputs": [],
"source": [
"!rm -rf data\n",
"!mkdir data\n",
"\n",
"!mv train.csv data/train.csv\n",
"!mv val.csv data/val.csv\n",
"\n",
"!unzip train.zip -d data/\n",
"!unzip val.zip -d data/\n",
"!unzip test.zip -d data/\n",
"\n",
"!rm -rf *zip sample_data"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "9hu57mgvVCMs"
},
"source": [
"# Step 1 - Getting data into shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Import modules"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"id": "TJvoYo-4UlIv"
},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"from glob import glob\n",
"from os.path import join, basename\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"from tqdm.notebook import tqdm\n",
"from skimage.color import rgb2gray\n",
"from sklearn.cluster import KMeans"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "iRNuBzKmVMXT"
},
"source": [
"## Loading Data\n",
"\n",
"### Labels\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 450
},
"id": "h11NTgcSU_Pb",
"outputId": "708c6270-3257-4fcf-ea56-1293f2ea77cf"
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>label</th>\n",
" </tr>\n",
" <tr>\n",
" <th>image_id</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>inventory</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>directories letter</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>growth splints</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>kicks</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>seventies</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>39995</th>\n",
" <td>output dioxide</td>\n",
" </tr>\n",
" <tr>\n",
" <th>39996</th>\n",
" <td>cruises fellow</td>\n",
" </tr>\n",
" <tr>\n",
" <th>39997</th>\n",
" <td>turn</td>\n",
" </tr>\n",
" <tr>\n",
" <th>39998</th>\n",
" <td>drift search</td>\n",
" </tr>\n",
" <tr>\n",
" <th>39999</th>\n",
" <td>handler</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>40000 rows × 1 columns</p>\n",
"</div>"
],
"text/plain": [
" label\n",
"image_id \n",
"0 inventory\n",
"1 directories letter\n",
"2 growth splints\n",
"3 kicks\n",
"4 seventies\n",
"... ...\n",
"39995 output dioxide\n",
"39996 cruises fellow\n",
"39997 turn\n",
"39998 drift search\n",
"39999 handler\n",
"\n",
"[40000 rows x 1 columns]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Load datasets\n",
"df_train = pd.read_csv('data/train.csv', index_col=0).sort_index()\n",
"df_val = pd.read_csv('data/val.csv', index_col=0).sort_index()\n",
"df_test = pd.read_csv('data/sample_submission.csv', index_col=0).sort_index()\n",
"df_train"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "7kF0OevOVnV_"
},
"source": [
"### Images"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"id": "WuhKGo4VVk1G"
},
"outputs": [],
"source": [
"# Get filenames\n",
"names_train = sorted(glob(join('data', 'train', '*')))\n",
"names_val = sorted(glob(join('data', 'val', '*')))\n",
"names_test = sorted(glob(join('data', 'test', '*')))\n",
"\n",
"# Combine filenames with label\n",
"label_train = [int(basename(n)[:-4]) for n in names_train]\n",
"label_train = pd.DataFrame(np.transpose([label_train, names_train]), columns=['idx', 'name'])\n",
"label_train.idx = label_train.idx.astype('int')\n",
"label_train = label_train.set_index('idx').sort_index()\n",
"label_train['label'] = df_train.label\n",
"\n",
"label_val = [int(basename(n)[:-4]) for n in names_val]\n",
"label_val = pd.DataFrame(np.transpose([label_val, names_val]), columns=['idx', 'name'])\n",
"label_val.idx = label_val.idx.astype('int')\n",
"label_val= label_val.set_index('idx').sort_index()\n",
"label_val['label'] = df_val.label\n",
"\n",
"label_test = [int(basename(n)[:-4]) for n in names_test]\n",
"label_test = pd.DataFrame(np.transpose([label_test, names_test]), columns=['idx', 'name'])\n",
"label_test.idx = label_test.idx.astype('int')\n",
"label_test = label_test.set_index('idx').sort_index();"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 235
},
"id": "OH_tUMCfVqLj",
"outputId": "a56c7f22-d85f-44e7-a34e-9bf3cca6ec7c"
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>name</th>\n",
" <th>label</th>\n",
" </tr>\n",
" <tr>\n",
" <th>idx</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>data/train/0.png</td>\n",
" <td>inventory</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>data/train/1.png</td>\n",
" <td>directories letter</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>data/train/2.png</td>\n",
" <td>growth splints</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>data/train/3.png</td>\n",
" <td>kicks</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>data/train/4.png</td>\n",
" <td>seventies</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" name label\n",
"idx \n",
"0 data/train/0.png inventory\n",
"1 data/train/1.png directories letter\n",
"2 data/train/2.png growth splints\n",
"3 data/train/3.png kicks\n",
"4 data/train/4.png seventies"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Check content\n",
"label_train.head()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([['data/train/7448.png', 'navies chase']], dtype=object)"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"label_train.sample().values"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 273
},
"id": "EIh0XA58Vrxf",
"outputId": "d1fcf8ad-d824-46ed-bdc4-3bbd6b923009"
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<PIL.PngImagePlugin.PngImageFile image mode=RGB size=256x256 at 0x159240150>"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Show random image\n",
"from PIL import Image\n",
"sample = np.ravel(label_train.sample().values)\n",
"im = Image.open(sample[0])\n",
"im"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "MD8xfft5VvFP"
},
"source": [
"### Preprocess images"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"id": "f1s_DBxgVs1V"
},
"outputs": [],
"source": [
"def prepare_text(df_label):\n",
" \n",
" \"\"\"This functions takes the original image, finds where the text is,\n",
" cuts it out, adds a certain padding and transforms colors to grayscale.\"\"\"\n",
"\n",
" images = []\n",
" for i in tqdm(df_label.name):\n",
"\n",
" # Load image as grayscale\n",
" img = np.array(Image.open(i))\n",
"\n",
" try:\n",
" # Compute scope of text (with padding)\n",
" padding = 4\n",
" x_scope = np.ravel(np.argwhere(np.any(img.std(1)>=1e-8, axis=1)))[[0, -1]] - [padding, -(1+padding)]\n",
" x_scope = np.clip(x_scope, 0, 255)\n",
" y_scope = np.ravel(np.argwhere(np.any(img.std(0)>=1e-8, axis=1)))[[0, -1]] - [padding, -(1+padding)]\n",
" y_scope = np.clip(y_scope, 0, 255)\n",
"\n",
" # Crop image\n",
" img = img[x_scope[0]:x_scope[1], y_scope[0]:y_scope[1]]\n",
"\n",
" # Compute color centers\n",
" n_clusters = 2\n",
" k_means = KMeans(n_clusters=n_clusters).fit(img.reshape((-1, 3)))\n",
" centers = k_means.cluster_centers_\n",
" labels = k_means.labels_\n",
"\n",
" # Make sure that dominant background color is center_0\n",
" if labels.mean() > 0.5:\n",
" centers = centers[::-1]\n",
"\n",
" # Compute distance between pixels and dominant color\n",
" new_img = np.linalg.norm(img.reshape(-1, 3)-centers[0], axis=1).reshape(img.shape[:2])\n",
"\n",
" # Clip and rescale image to main colors\n",
" plow = np.percentile(new_img, 5)\n",
" phigh = np.percentile(new_img, 95)\n",
" new_img = np.clip(new_img, plow, phigh)\n",
" new_img = new_img - new_img.min()\n",
" new_img = new_img / new_img.max()\n",
" \n",
" # Flip colors\n",
" new_img = 1. - new_img\n",
"\n",
" except:\n",
" # If it fails make image empty\n",
" new_img = np.ones((21, 80))\n",
" \n",
" new_img = np.array(new_img*255, dtype='uint8')\n",
"\n",
" images.append(new_img)\n",
" \n",
" return images"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Example of the preprocessing"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "5dc4c34a91c54547a358b666dbda8450",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/1 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Plot an random image before and after preprocessing\n",
"fidx = np.random.choice(len(label_train))\n",
"img = Image.open(label_train.name[fidx])\n",
"img_preproc = prepare_text(label_train.iloc[fidx:fidx+1])\n",
"\n",
"plt.title('before')\n",
"plt.imshow(img)\n",
"plt.show()\n",
"plt.title('after')\n",
"plt.imshow(img_preproc[0], cmap='gray')\n",
"plt.show();"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "1c8d62309ee747d8b5b978c0117e697b",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/1 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Plot an image before and after preprocessing\n",
"fidx = 63\n",
"img = Image.open(label_train.name[fidx])\n",
"img_preproc = prepare_text(label_train.iloc[fidx:fidx+1])\n",
"\n",
"plt.title('before')\n",
"plt.imshow(img)\n",
"plt.show()\n",
"plt.title('after')\n",
"plt.imshow(img_preproc[0], cmap='gray')\n",
"plt.show();"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The trick with this preprocessing is two fold:\n",
"\n",
"1. Cropping image to text only reduces data size. This is simply done by looking for pixel variance in x and y direction. Given that this dataset doesn't contain any extra noise, the text can very easily be located.\n",
"2. Given that all images only consit of two colors, plus jpeg compression noise, the color information is not relevant and images can be convert to gray scale. However, sometimes the background and text color are very close to each other, so a simple threshold doesn't work here. The solution I found was to take the dominant color (i.e. background) and compute the euclidean distance (i.e. using RGB) to all other pixels. I then used this distance metric as \"gray\" value, clipped it of at 5% and 95% and achive strong black/white contrast, independent of original colors."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Run Preprocessing for all images"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 405,
"referenced_widgets": [
"3a2bad78acc44585b9829bf306c52b7a",
"82552d61c8c6469bbb0b4486ab2adc49",
"2b6123d93dfd4fc7b4562a89a262eb45",
"a254be8e0e1544d5aaf1f623db739fe8",
"7ce81b535fde41c3baa22e03f3c0fbe8",
"ac32bbe688734272b398a5982e4dc0d3",
"225694dfe9d942fd8a38ec4d0a7bcd03",
"a326496d7b7e48cf8af7d144000e6c09",
"233c0370ac474b4da4da1f56a64ee283",
"dc51797e5632486bbc23ac3a82e61a61",
"3416cfc3246148ae84dca149b366887a",
"fc260585f8e3467eafa489f98de91c9a",
"0667e8e68af9454186058ae25e679c3e",
"9e8587b85d604d7b9c0c1b88a04e5dc1",
"b5ef88d5bea94884903f5d2381eb521d",
"22d8710662ba4e6ab0eaf377ab05c814",
"c15a6cb9e5424daaa96bbb6acb2eae65",
"04a113b7504346eb9b7d540e429c3683",
"a2fb54c188264a24a9aa46d61e1e5d04",
"5795c5bc3eae4d1ea740f3f8badf29f1",
"cbcf2d16f0d94dbe95f98482990189b3",
"f5bbeddd413d46009b660a5980e960df",
"8d085b455ec14addb9fec9a56592a31c",
"89e69d39571f4e4abc0490bb0235fd7b"
]
},
"id": "uUNC2pgtVyw-",
"outputId": "04f997b8-2eb3-4d67-83ec-74d53dfa4987"
},
"outputs": [],
"source": [
"# Preprocess training set and save data on disk\n",
"img_train = prepare_text(label_train)\n",
"np.savez_compressed('img_train',\n",
" data=np.array(img_train,dtype=object),\n",
" labels=df_train.label.values)\n",
"\n",
"# Preprocess validation set and save data on disk\n",
"img_val = prepare_text(label_val)\n",
"np.savez_compressed('img_val',\n",
" data=np.array(img_val,dtype=object),\n",
" labels=df_val.label.values)\n",
"\n",
"# Preprocess validation set and save data on disk\n",
"img_test = prepare_text(label_test)\n",
"np.savez_compressed('img_test', data=np.array(img_test,dtype=object))"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "sFCfjEC7V4si"
},
"source": [
"## Load data (helps with rerunning analysis multiple times)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"id": "bdvD4ZdUV1QA"
},
"outputs": [],
"source": [
"# Load train data\n",
"npy_train = np.load('img_train.npz', allow_pickle=True)\n",
"img_train = npy_train['data']\n",
"label_train = npy_train['labels']\n",
"\n",
"# Load val data\n",
"npy_val = np.load('img_val.npz', allow_pickle=True)\n",
"img_val = npy_val['data']\n",
"label_val = npy_val['labels']\n",
"\n",
"# Load test data\n",
"npy_test = np.load('img_test.npz', allow_pickle=True)\n",
"img_test = npy_test['data']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"# Step 2 - EDA: Look at data"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "E3C-s2UWV9cU"
},
"source": [
"### Exploration of labels"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 198
},
"id": "cIRULsigV7tF",
"outputId": "d18ca220-8a68-4911-99d8-cb95fea1972f"
},
"outputs": [
{
"data": {
"text/plain": [
"((44000,), array(['inventory', 'directories letter', 'growth splints', ...,\n",
" 'casualty turnarounds', 'thresholds', 'validations lighter'],\n",
" dtype='<U31'))"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Explore words in labels\n",
"words = np.array(list(df_train.label.values) + list(df_val.label.values))\n",
"words.shape, words"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 232
},
"id": "SA68uU6uWAPh",
"outputId": "f6eebf7d-b601-4484-c60f-daa11c787c9e"
},
"outputs": [
{
"data": {
"text/plain": [
"((491599,), array(['i', 'n', 'v', ..., 't', 'e', 'r'], dtype='<U1'))"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Explore characteres in labels\n",
"letters = []\n",
"for i, w in enumerate(words):\n",
" for c in w:\n",
" letters.append(c)\n",
"letters = np.array(letters)\n",
"letters.shape, letters"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 211
},
"id": "KLktXZZ4WB7Y",
"outputId": "aa36f9fe-c75f-429c-f063-96efbd2c90bb"
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1008x216 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Plot unique characters\n",
"pd.value_counts(letters).plot.bar(figsize=(14, 3));"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 35
},
"id": "2ydmArxyWCw0",
"outputId": "74a3fa22-ac62-4dbb-ad97-6b642a05e9be"
},
"outputs": [
{
"data": {
"text/plain": [
"' .abcdefghijklmnopqrstuvwxyz'"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Print which letters\n",
"unique_letters = ''.join(np.unique(letters))\n",
"unique_letters"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 282
},
"id": "UGPckfujWDgC",
"outputId": "be65f5f9-4ba2-43d4-e819-f0bd2bdd49e2"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Max: 31\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Max length of text\n",
"text_length = [len(w) for w in words]\n",
"plt.hist(text_length, bins=100);\n",
"print('Max:', np.max(text_length))"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "D1C4IzCMWFZp"
},
"source": [
"### Exploration of images"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 117
},
"id": "YiXtibwBWESF",
"outputId": "8e00539b-cf35-42be-f9f7-8166d05251fe"
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Plot example image\n",
"img = img_train[1]\n",
"label = label_train[1]\n",
"plt.title(label)\n",
"plt.imshow(img);"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 314,
"referenced_widgets": [
"71eda1b10c1a40e9b02067582d024792",
"a6c35da7df8d4d69b19c0b7f207173aa",
"a329300736664d5584cfebe3d8aa98d0",
"b40b54d7254c4ebdbdb1a20dd520e9f2",
"4f2b1b1be0c9483c8b05e213c5ce0cd6",
"abfb3e162f404ef785c67a880628fbd3",
"a659eb6e06bb436d9c35043bf3f174cd",
"ccdaad2aa45c43158460b3767ea04940"
]
},
"id": "i9CcdOk0WHBG",
"outputId": "110d9b70-a7b8-4520-c78c-92c5d6343d7a"
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "26294b621e334ab5b1bce9a374ad2cc5",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"0it [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Size of words\n",
"word_size = []\n",
"for i, e in tqdm(enumerate(img_train)):\n",
" word_size.append(e.shape[1])\n",
"plt.hist(word_size, bins=100);"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 315,
"referenced_widgets": [
"b2867da55a7e499689e1b76bbe47dd3e",
"96528b6034584166ba25869c6071905b",
"de44aca319874ebf8519ff4b1ee53e20",
"43812769dbc4455d999d700e1ade1749",
"49c1279c14054221aa6cdc2b47ac20f8",
"9f7ce693dc03402c8ff6173353a4cc38",
"fc74723623bf4e4dba2b342ae7a5d925",
"f681351ff9ab41c0ad019c4817fc52a8"
]
},
"id": "-EhpUFlVWH-v",
"outputId": "3a85f925-5d0b-46c2-f373-f7ef887684ca"
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "d0ee2998094f477b8a13143bb3570ea2",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"0it [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# height of words\n",
"word_height = []\n",
"for i, e in tqdm(enumerate(img_train)):\n",
" word_height.append(e.shape[0])\n",
"plt.hist(word_height, bins=100);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Create word corpus of training and validation set - used for later typo correction"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "4b983b23b11d49ff98fc491dc0bbfb9a",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/44000 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"(5450,\n",
" ['abbreviation',\n",
" 'abbreviations',\n",
" 'abettor',\n",
" 'abettors',\n",
" 'abilities',\n",
" 'ability',\n",
" 'abrasion',\n",
" 'abrasions',\n",
" 'abrasive',\n",
" 'abrasives'])"
]
},
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Get words from training and validation set\n",
"corpus = np.array(list(label_train) + list(label_val), dtype='str')\n",
"word_list_txt = []\n",
"for w in tqdm(corpus):\n",
" word_list_txt = word_list_txt + w.split()\n",
"word_list_txt = list(np.unique(word_list_txt))\n",
"len(word_list_txt), word_list_txt[:10]"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"5450"
]
},
"execution_count": 67,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Overwrite word corpus by dataset only\n",
"word_corpus = np.unique(word_list_txt)\n",
"len(word_corpus)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Step 3 - Prepare dataset for ML model\n",
"\n",
"The ML model that we want to use expects the text to be centered in the image and that all images have the same extent. Therefore we will create a standard canvas and put the word into the middle of this canvas."
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
"def create_canvas(img):\n",
"\n",
" # Target size\n",
" height = 32\n",
" length = 256\n",
"\n",
" # Load image and extract size\n",
" h, w = img.shape\n",
"\n",
" # Prepare canvas\n",
" canvas = np.array(np.ones((height, length))*255, dtype='uint8')\n",
"\n",
" # Find middle line of image\n",
" weigth = np.mean(img, axis=1)\n",
" try:\n",
" middle_idx = int(np.median(np.argwhere(weigth<np.percentile(weigth, 30))))\n",
" except:\n",
" middle_idx = int(h/2)\n",
"\n",
" # Fill canvas with image\n",
" offset_x = length//2 - w//2\n",
" offset_y = height//2 - middle_idx\n",
" canvas[offset_y:offset_y+h, offset_x:offset_x+w] = img\n",
" \n",
" # Convert to range [-1, 1]\n",
" canvas = canvas / 127.5 - 1\n",
" \n",
" return canvas"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 252,
"referenced_widgets": [
"71f620b14e8f40d984a21e72a1d44df7",
"ff1accc920b94bb0a6f45fa7932b1b52",
"3b568e2223584e2ba5a6f91d6faa8a57",
"3e2af4d6e7074c439f1b8b2200dfd86d",
"bcada1367d1b46369001ef81870e982b",
"83e071849c444e0f9b055deca296d096",
"58280e0e440e488fa2bd532e05df947e",
"9920cf96a63f4646bcc05ea73787d013",
"06dae492c5594dd890cf2508df4cb7f4",
"ed85011d48264a01bc51c1c017e33913",
"0fd2ee5b6588440ab6c019ff538fddd3",
"2844bc4ec2b04361a1a7d3135d094437",
"5a02349e9f4f45e7b620ac939f8d9450",
"e2653757ca144f698cf9c0a703996853",
"3f67f1ce2f2943e3b6628eb6b8980568",
"36411bec38304ec9b609f30dde3eec80",
"89b65fa15d77493d950039b27d189416",
"841590ffaf1b4e26af3466c1bd8ab821",
"0e1e166b08844a5893af7f9db4768f6b",
"d9372dff43214747a4cc1119c98f74e3",
"30e53a6114b84ac6bfeadbcbce49bc41",
"4797a3569b9d4f01866ab9d3249601c6",
"106a1fbf43664ae78beaaa5944ea678a",
"201bb34936e8441cb3f4844b3c0c5ba3"
]
},
"id": "gmxYLlrGYw15",
"outputId": "f2a30fd2-5094-4a13-9d17-7499a139be6d"
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "9578c0860f3c4b3b891c51cbc1864a3a",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/40000 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/anaconda3/envs/blitz/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.\n",
" out=out, **kwargs)\n",
"/anaconda3/envs/blitz/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars\n",
" ret = ret.dtype.type(ret / rcount)\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "ca1747284fc14fdd9ec6a70cb1d292c6",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/4000 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "eac2a8a4495f43ff8f7da9db4e807e9b",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/10000 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Prepare datasets\n",
"x_train = np.array([create_canvas(i) for i in tqdm(img_train)])\n",
"x_val = np.array([create_canvas(i) for i in tqdm(img_val)])\n",
"x_test = np.array([create_canvas(i) for i in tqdm(img_test)])"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXMAAABMCAYAAACf4VdeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAAX8UlEQVR4nO3ce3CU9f3o8fd3N8nmam6bC5v7nVxNgAQFScVKK1KUY+upZ+SMjDrSAQtOrT20v2n9zVSt7cxx2lrbGapMtVWKHQ9KUfsTf4jgAELAhJCEXIBAQkgC2Q257252v+ePJE8JEEQJCSyf10wmm2ef3f18P/nms89+nu8TpbVGCCHEjc003QEIIYS4elLMhRDCB0gxF0IIHyDFXAghfIAUcyGE8AFSzIUQwgdcVTFXSt2jlKpXSjUppdZNVlBCCCG+GvV115krpcxAA7AIaAX2A/9La107eeEJIYS4EldzZF4GNGmtj2mtXcDfgfsnJywhhBBfhd9VPDYBaDnv51Zg7uUeYLVadWpq6lW8pBBC3HwOHDhwVmsdc7l9rqaYq0tsu6hno5R6AngCIDk5mYqKiqt4SSGEuPkopU582T5X02ZpBZLO+zkRaLtwJ631eq31HK31nJiYy76xCCGE+JquppjvB7KUUmlKqQDgIWDL5IQlhBDiq/jabRat9bBS6kngvwAzsEFrXTNpkQkhhLhiV9MzR2v9AfDBJMUihBDia5IrQIUQwgdIMRdCCB8gxVwIIXyAFHMhhPABUsyFEMIHSDEXQggfIMVcCCF8gBRzcdNyuVx8+umnlJaW8sADD/Dqq69OazybN2/mkUce4dZbb+Wvf/0rAwMD7N27l+eee478/Hzeffdd2tvbpzVGcf26qouGhLieeb1efvOb32C328nLy2PFihXj7ne5XFRVVXHy5EnS09NJSkq69BNNkbq6Ourr6+nq6iIxMRGz2YzD4aC1tZWOjg7MZjMm01c7/vr9739PW1sbsbGx/OhHP7pGkYvrgRyZC5/lcrn4y1/+whtvvMHOnTsvun94eJiamho8Hg82m42cnJxpiPLfmpqaOHv2LEFBQWRlZeHn50dISAg2m42ysjJmzJiBxWK54ufzeDxs3LiR119/nX/961/XMHJxPZAjc/GVaK2Nr/OZzeaL9vV6vcZjAEwmE0qpCe9XSo078vR6vWitL9qutcbr9V52u8fjoaenh5aWFrKzs0lLS8Pj8YyL1e12U1FRgcViwWazkZSUhMfjueh5L2csxjGXeuylxjn2db66ujocDgfZ2dkkJiYCcMcddzB//vxxzzs2zgudv4/X66W3t5dTp05xyy23kJ2dbYz//N/DhbFd6vcobgxyZC6uiMfjYc+ePTz77LPcfvvtpKSkEBcXh9VqJTY2lvb2dqMweL1eduzYwZNPPsm8efOw2WxYrVY2bNjA0aNHcbvdVFdXs3LlSubOnUtaWhr5+fmsW7eOL774AhgptN/4xjeYOXMmTz31lBFHX18fL7/8MqmpqTz++ON0dHQAYLfbWb9+PWlpaaxevZp//OMf7NmzB6/XS3V1NS+88AJWqxWr1cqePXvweDwMDQ1x+PBh2tvbefbZZ4mLiyM9PZ2VK1fy2WefXTYfAwMDfPzxx/zgBz+goKCAlJQUCgoKWLZsGdu3b8fpdOJ2u6mtrWXlypWUlZWRkZFBeno6paWlPP/885w8edLIbUNDAw6Hg9jYWMrKygBob29n7dq1ZGdns2rVKgYGBmhpaeHVV181xmK1WklISKCgoIAf//jHtLWN/BfqoaEhPvvsM5xOJ01NTeMes2nTJlwuFw6Hg6effpry8nJycnIoKiq66E1a3DjkyFx8qYGBAV555RX27NlDXV0dbW1t9Pf34/V68fPzIy4uDn9/f5RSDA4OcvLkSV544QUaGxux2+309fWhtSYxMRE/Pz8qKir45S9/SW1tLXa7ncHBQfz8/Ni8eTMhISG43W6Ki4txu9309PTQ19dnxLJv3z4qKyux2+309PQYbyC9vb18+OGHOBwOkpOTSU5OZseOHXi9XjweDx6PB6fTSVRUlNGLrq+vx+12o7VmcHCQwcFBenp62LZtGzabjaCgIGbPnn3JnLzzzjt89NFH7Nq1i87OTtxuN11dXQQEBBATE4PZbKa1tZUDBw6wbds27HY7Q0NDwMgbz8aNG4mIiODOO+8kKyuL6upqBgcHSU9PJzc3F4CGhgZaW1txuVwkJydjMploaWmhqamJ7u5uIxaTyURPTw///Oc/KS4uZv78+URHR3P48GFcLhderxen02mMf+x53nzzTbZu3cqZM2cYHBwkPDzc+CQkbjxSzMVljbUi3nvvPY4fP47ZbKa4uJjAwEAaGhro6uoiJSXFKOYDAwPU19fz6aefkpqaSlFREWFhYZhMJtLS0rDb7Wzbto2PPvqIjIwMioqKCA4OxuFwUFlZyf79+0lMTKSkpITAwECAcS2Fffv2UV9fj9aa4eFhYOQotLOzk6qqKmw2GxkZGURERFBfX4/X66W4uJjY2FjMZjMxMTFERUXhcDhobGxEa01RURFRUVH4+fnR2dlJbW0tNTU15ObmTljMd+/ezd69e+nq6uKOO+7AbDajlCI+Pp64uDhMJhPt7e3U1dVx4sQJCgoKsFqtKKWw2+0cOnSIvXv3YrPZSE1Npba2FqfTSUxMDFlZWcBID91utxMYGEhOTg5ms5nTp09z6tQpTCYTs2bNIiIiArfbzZkzZ6itreXQoUOkp6cTFhZGXV0dbreb7OxsUlNTMZvNWK1WEhMTOXv2LB988AGtra3k5+cTHR1NRESEFPIbmBRzcVkDAwP86le/4vDhwyQlJbFw4ULWrl2LzWbjF7/4BW+99RaFhYVGr/bcuXMcPHgQr9fLo48+ytKlS8nLywNGivKf//xn/vSnP2E2m3n88cdZvHgxqamp7N27l+9973s0NzfT2NgIQGho6Lii7fF42LFjB9XV1SilGBoaQmtNR0cHtbW1NDc3s3r1alJTUxkcHKSyshKtNT/72c+47777xp083L17N9XV1QA888wzlJeXEx4ezpYtW1izZg12u53Ozs4J83LixAnjU8Cbb75JeHi48YY25tSpUxw7dgyz2cwzzzzDXXfdhZ+fHzt37uThhx+mpqaG4uJihoeHOXjwIENDQ8yYMYOCggJgpIfe1dVFSEgIRUVFmM1mWlpaaG5uxt/fn+eee46ysjLsdjsffvgha9asoa2tDbvdjtPp5ODBgwwPD/Poo4+yZs0agoKCjNi2b99OQ0MDYWFh/PznP2fhwoWEhoZKMb+BSc9cTGhwcJCWlhY+/vhjMjMzWbVqFS+99BLp6ek0NzfT2dlJQEAAt99+O/7+/gA4HA527tyJUor8/PxxK0T2799PZWUlAwMDrFy5kkceeYT8/HxCQkK47bbb8PPzw+PxGCcxY2Ji8Pf3x+v14nK5WL9+Pc3NzURHR1NWVkZfX5/Rn9+wYQMWi4VVq1aRm5uLw+GgtraWwsJC4uLiLloF0tbWxp49ezCZTMyZM4fk5GTMZjOJiYmYTCYiIiKIioqaMDe33XYbaWlpNDY2cu+997Jhwwbq6urG7XP06FGqq6uxWCwsXbqUxMRE4uPjueeee1BKMTw8jMfjwe12s3v3bmPlSlxcHAAVFRXY7XaioqLIzMzEZDLR0NBAfX09/v7+zJ8/n4iICIKCgoiPjwcgKiqKwMBA+vr6qKmpISsri4SEhHGFHMBqtbJo0SLsdjs/+clPWLt2LVu3bv36k0VMOzkyFxPq7u6mvr4ej8fD7NmzyczMxM9vZMrU1NTQ2dlJYGAgt956q7G9t7eX2tpaMjIyCA8PH7c64uTJk3R0dBAQEMC8efMIDg5GKUVfXx8HDhxgeHiYuLg4bDYbAJGRkfj7+xtvKm+88Qa5ublGYaqurqapqYmqqipOnDjBAw88QFxcHGfPnuX48ePASNG9sCh7vV7sdjstLS3k5uYa7Ryn00llZSXDw8PEx8eTmpo6YW6WL19OXl4eO3bsYMeOHbzyyis0NDSwbNkyysvLAejs7MThcDBr1izjzc5ut3PgwAG01iQkJBASEkJbWxvd3d3ceeedJCcno7XG6XTS2tpKSEgIGRkZKKXo6enBbrfj8XjIzMwkICDAaNvU1NSgtSYjIwOz2UxDQwNaa2bPnk1CQsJF8aenp/PTn/6UlJQU9u3bR0VFBU1NTSxdulSOzm9QX1rMlVJJwBtAPOAF1mutf6eUigI2AalAM/A/tdaOaxeqmGpOp9M40WY2m8cV5rGTcKGhocbRbG9vL2fPnqW7u5vS0lJCQ0PHPV9/fz8ul2vctr6+Po4fP87777+Py+UiJSWFzMxMlFJGMW9vb+eTTz7h2LFjLFmyhODgYOrr6+nt7WXnzp0cOXIEf39/7r//fkJDQ403jbEe9lixHtPV1cXZs2cZHBwkOzubgIAAY7x1dXUMDw8TGxtrLA+8lPT0dIKCgggNDaW/v593332XgwcPkpmZSXl5OV1dXdjtdpRSzJo1C6/Xy+nTp6mtrWXr1q1orZk5cyYxMTG0tbXhcrmIjo4mLCyM4eFh4yRzcnIyKSkpwEjb5ty5cwQEBJCdnW20trq7u2lsbEQpRUpKChaLhfr6egBiY2MJCQm5KP7Q0FCKioro6+vDz8+PXbt2UVdXJydAb2BXcmQ+DDyttT6olAoDDiiltgErgP/WWr+olFoHrAP+z7ULVUyHsaVqLS0ttLS0YLfbAaitraWvrw+bzUZ0dDQAra2tHD9+HI/Hw6233kpYWNi45/Lz88NsNuN2uzl06BBlZWV0d3eze/duNmzYAEBhYSGzZs0CRgqRxWKhqamJ1157DYvFwqJFi3C5XJw8eRKHw8Fbb72FUoqcnBwefPBBTCYT586dw+EYOa4YW2/ucDhQShEREcHRo0dpbW01TuaOtWCcTqfRj7fZbCQnJ18yJ93d3WitsVgsxqqb7du309XVRXNzMwD19fXGycvc3Fw6Ojqoqqpi+/bt/O1vfyM4OJi5c+eSnJzM4cOHjVx7PB76+vqorq7G5XJhs9nIzMxEa82RI0fo7u4mLCyMwsJCo+h2d3cbb2hpaWlorenq6gJGLozq7+83xh8eHs7g4KCxyiUvL89YzXNhm0jcWL60mGutTwOnR2/3KqXqgATgfuDO0d1eB3YgxdynWK1WSkpKANi6dSvvv/++UUC01uTl5ZGfn2/sX1dXx6FDhzCZTCxYsOCi9sbcuXOpqqpiy5YtvPjii/z61782ngvgqaee4q677sJms+H1eklJSSEoKMg4in755ZfJyMigra0Nq9VKT08PPT09rFixgscee8w4Ug0JCSEsLAyPx8Nzzz3H888/j7+/P/Hx8Rw9epRDhw5x7NgxLBYLCxYsMNo2Q0NDfPHFF2RlZREdHX3JC4f6+vooKSmhvb193KcMr9fLd77zHWON+P79+zl9+jTHjh1j1apV4/Lm7+/PCy+8wIIFC9Bac/ToUQA2bdrE0NAQdruduro6XC6XsSII4MCBAzgcDqKjoykvLzfis9vtHDlyhLy8PEJCQvB6vYSHhwPw29/+lt/97neYzWZuueUWmpqaePbZZ9m4caNR8Mfiutw5AnH9+0o9c6VUKlACfA7EjRZ6tNanlVKxkx+emE7BwcGkp6ezbt06Nm/eTEtLC/39/cb9ycnJRqEBOHbsGEeOHMHPz49Zs2YZBeX8/ZcuXYrH42HTpk3Y7XbCwsJISUlhyZIlLF++3OiXK6VIT08nODiYqKgoioqKWLJkCREREZw7d47Y2JHpds899/Ctb32L4uJi43Vyc3NxOp3s3buXzz//HI/HQ0REBDk5OSilOHLkCC0tLVgsFubMmUNgYCBnzpyhsbERl8tFYWEhMTExF+XD7XbT29trrJbp6elBa018fDx33303ixcvZuHChcBIP39sNYxSiqCgIFJTUyksLGTRokUsXrwYq9WK1pry8nK++93vsm/fPhITE0lISOCtt94y1uanp6ejtaa6uppz586RlpZGSUkJSilOnDhBa2srXq+X2bNnExQURExMDIsWLeLb3/42FRUVDA0NERwcTE5ODn19fYSHh2Oz2RgYGMDlcmG1WsnOzqa8vFxaLDewKy7mSqlQ4B3gKa11z5X+0pVSTwBPABN+bBXXp7a2Nqqrq1m4cCGRkZF0dHRw5swZ42RZUlISM2fONPYvLCxkeHjY2P/CS8MtFgs5OTksW7aMyMhIenp6CA4OJi4ujtLSUlJTU40TqUopYmNjefDBBykvLyclJYWYmBijl15cXMyaNWuYM2cOJSUl4/rzoaGhZGVlsXz5cubMmYPX6yU4OJiEhASUUsydO5fIyEg8Ho/RCgoICCAxMZEf/vCHzJs375Jz1WQyERQUxEMPPURbWxuDg4PGEW1JSQm5ublERkYCI29sAAUFBdx9990EBAQQFxdnFOIZM2YYzxsXF8f3v/99iouLKSwsJCMjg3vvvZeSkhJKS0sJDAxEa82iRYvIz88nLS3NiDsoKIji4mJWr17NvHnzuOWWWwgMDCQpKYmHH36Y0tJS3G43AQEB2Gw2goODjVUwnZ2duFwuIiIiSEhIIC8vT4r5DUxdyeW7Sil/YCvwX1rrl0a31QN3jh6VzwB2aK0v+5+K5syZoysqKiYhbHGtjfWBN2zYwNNPP01MTIxxYu6Pf/wju3btYu3ataxcuZKIiIjpDve64na7yc3Nxd/fn29+85v84Q9/mO6QxA1OKXVAaz3ncvtcyWoWBbwG1I0V8lFbgEeAF0e/v3cVsYrrTFVVFdu2bePtt9/m7bffvuj+NWvWsGDBAinkF3A6nTQ0NNDb20thYeG4Ty5CXEtX0maZD/xvoFopVTm67WeMFPG3lVKPASeBB69JhGJaJCcnU1ZWZvRd+/v7jWWI9913HytWrDAuVBH/NjQ0xP79+3G5XCQmJhqX5gtxrV1Rm2WySJvlxjE0NERLS4txQY7L5cJisRAZGUlhYSFFRUXG+mzxb0NDQ1RXV/PJJ5+Ql5dHYWGhsU5ciK/rStosUsyFEOI6dyXFXP43ixBC+AAp5kII4QOkmAshhA+QYi6EED5AirkQQvgAKeZCCOEDpJgLIYQPkGIuhBA+QIq5EEL4gCm9AlQpdQboB85O2Yten6xIDiQHIyQPkoMxl8tDitb64n+yf54pLeYASqmKL7ss1ddJDiQHYyQPkoMxV5sHabMIIYQPkGIuhBA+YDqK+fppeM3rjeRAcjBG8iA5GHNVeZjynrkQQojJJ20WIYTwAVNWzJVS9yil6pVSTUqpdVP1utNNKdWslKpWSlUqpSpGt0UppbYppRpHv0dOd5yTTSm1QSnVqZQ6fN62CcetlPrp6NyoV0p9e3qinlwT5OA/lVKnRudDpVLq3vPu88UcJCmlPlFK1SmlapRSa0e332xzYaI8TN580Fpf8y/ADBwF0oEAoArIm4rXnu4voBmwXrDtN8C60dvrgF9Pd5zXYNzlwCzg8JeNG8gbnRMWIG10rpinewzXKAf/Cfz4Evv6ag5mALNGb4cBDaNjvdnmwkR5mLT5MFVH5mVAk9b6mNbaBfwduH+KXvt6dD/w+ujt14Fl0xfKtaG13gnYL9g80bjvB/6utXZqrY8DTYzMmRvaBDmYiK/m4LTW+uDo7V6gDkjg5psLE+VhIl85D1NVzBOAlvN+buXyA/ElGvhIKXVAKfXE6LY4rfVpGPklA7HTFt3UmmjcN9v8eFIpdWi0DTPWXvD5HCilUoES4HNu4rlwQR5gkubDVBVzdYltN8symvla61nAYmC1Uqp8ugO6Dt1M8+NPQAZQDJwG/u/odp/OgVIqFHgHeEpr3XO5XS+xzZfzMGnzYaqKeSuQdN7PiUDbFL32tNJat41+7wQ2M/JRqUMpNQNg9Hvn9EU4pSYa900zP7TWHVprj9baC/yZf3909tkcKKX8GSlgb2qt/9/o5ptuLlwqD5M5H6aqmO8HspRSaUqpAOAhYMsUvfa0UUqFKKXCxm4D3wIOMzL2R0Z3ewR4b3oinHITjXsL8JBSyqKUSgOygH3TEN81N1bARv0PRuYD+GgOlFIKeA2o01q/dN5dN9VcmCgPkzofpvBs7r2MnME9CvzHdJ9dnqIxpzNyRroKqBkbNxAN/DfQOPo9arpjvQZj38jIx0Y3I0cZj11u3MB/jM6NemDxdMd/DXPwV6AaODT6BzvDx3NwByPtgUNA5ejXvTfhXJgoD5M2H+QKUCGE8AFyBagQQvgAKeZCCOEDpJgLIYQPkGIuhBA+QIq5EEL4ACnmQgjhA6SYCyGED5BiLoQQPuD/A9zjQ+UB/F0HAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXMAAABMCAYAAACf4VdeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAAdy0lEQVR4nO3deXCb1b3w8e/RYtmWbMn7vi+xnTiJncUQJxAgyQskaci0dIApEyhDOultey/Tzryld4ZCt/uWTjpTWkrbG0Jp2hLIXEpZQgphuCUsCYkbk82OLa+Sd3mRrcWWJZ33D9vPTUo2sthc5XxmNJKePI+e3zk6+enonPPIQkqJoiiK8r+bbq4DUBRFUa6cSuaKoigRQCVzRVGUCKCSuaIoSgRQyVxRFCUCqGSuKIoSAa4omQshbhdCnBZC2IUQ371aQSmKoiifjbjcdeZCCD3QBKwFnMBh4F4p5amrF56iKIpyKa6kZ74csEspW6WUAWA3sOnqhKUoiqJ8FoYrODYLcJzx3AnUXOiA5ORkmZ+ffwWnVBRFuf7U1dW5pJQpF9rnSpK5OMe2T43ZCCG2AlsBcnNzOXLkyBWcUlEU5fojhOi42D5XMsziBHLOeJ4NdP/zTlLK30kpl0opl6akXPCDRVEURblMV5LMDwMlQogCIUQUcA/w6tUJS1EURfksLnuYRUoZFEJ8A/gboAd2SilPXrXIFEVRlEt2JWPmSCn3AnuvUiyKoijKZVJXgCqKokQAlcwVRVEigErmiqIoEUAlc0VRlAigkrmiKEoEUMlcURQlAqhkriiKEgFUMlcu2cTEBH19fbz77rscPHiQ3t7eix7jdDp58cUXWbZsGffddx8vvfTSZZ1bSsnIyAiHDh3i/fffp76+/rJe53LV1dWxfft2amtrefDBB2lubqalpYUdO3ZQUlLCU089xYkTJ2Y1ps9iaGiI3bt3s2jRIh599FH+/ve/z3VIylWmkrlyyRoaGvjjH//Iz3/+c44ePcrQ0NBFjxkcHOTIkSM0NjZiNBqJiYm5rHNPTk6ye/dufvWrX/Hyyy/T0tJyWa9zuZqbm6mrq6OxsZHo6Gh0Oh0ejwen00l7ezudnZ2MjIzMakyfxeTkpBZrR0cHAwMDcx2ScpWpZK5cspaWFl5//XVef/11XC4XgUDgoseMjIzQ0NCAx+MhKyuLi/3YWiAQYGxsDJfLxfj4OOFwWNu+d+9eXn/9dY4ePYrX670qZbpUnZ2dtLa24vV6ycvLw2QyYTKZSExMZPHixaSmpl72B9Vs0Ov12Gw2Fi5cSHZ2Nmazea5DUq6yK7qcX/n8CYVCAAgh0Ol0SCm1hDiz7cznQkz9krGUUrsJITjzL1Dp9XqklPT399PU1ARAQUEBiYmJ2j4zrzlzvE431U9wu900NjYCUFJSQlpaGqFQ6Kx9ztTd3U1HRwednZ0sXbqUnJwcLBYLwWCQ48eP4/P5SEhIoLCwUDvmYrHP7HNmuc8V65n++TVnet86nY6ysjJiY2PJysqiqKiI++67j4SEBO1cZ74Hn/U8M9vOjP1cx8yURafTaWUOh8PaeyqEIBQKaf+enJzMgw8+yObNm7FYLJhMprNinYl3Jo4z28aZwuHwOWOdOY8yh85sTNf6tmTJEqlcG8FgUA4MDMjU1FRps9nktm3b5MjIiHzppZfkggULZFlZmXzggQdkKBSSK1eulNu2bZN79+6VUko5NDQkt2/fLm+//XaZk5MjN23aJPPz86XNZpOFhYXS7XbLnTt3yvXr10shhARkSkqKfOaZZ2QoFJIjIyPyG9/4hrzhhhtkaWmprKmpkS0tLdLn88ldu3ZJnU4nAXnbbbfJ2tpamZ+fL2+77TbZ0dEhQ6GQVgav1yu3bt0q4+PjZXx8vHzmmWekw+GQDQ0N8oknnpB6vV4CMjY2Vs60peHhYfn73/9ebtq0SWZnZ8sNGzbIsrIyabPZZEpKiuzt7ZU+n0++9NJL0mazSZvNJtesWXNWHC0tLWfFMTw8LJ9++mm5fv167TWzsrKkEEJaLBbZ2toq3W63/M1vfiNtNpu0Wq2yvr5e+v1+eezYMe08NTU1ct26dTI7O1uuXr1avvPOOzIYDGrncbvd8rXXXpN33323zM7OluvWrZOLFy/Wjm9sbJQTExNnvc8TExPy1Vdf1fZ56623ZFNTk3z22WdlQkKCrK2tlb/73e9kW1ubLC4ulk899ZSsr6+XH374oRbrrl27pN/vl8PDwzI9PV3abDZZVlam1WFtba18+umn5eTk5FnvzSeffCLvvfdemZ+fL1euXClvuukmLY6//vWv0ufzXZO2rUgJHJEXya9qmCVCeL1eWlpaGB4eJhwOYzAY0Ol0NDY2MjAwgF6vJyEhASklBoOB3t5empqaCIVC/Md//Ad79uxhdHSUhx9+mOXLl6PX6/H5fAghiI6OpqSkhNTUVABiYmJ44oknuPXWW+nq6uKxxx5j3759lJeXs379emJjYzl8+DANDQ309vYSDocxGo1s2LCB2tpaoqOjOXr0KB9//DHd3f/zE/iHDx+mu7ubiYkJfD4fHo+HYDCI1WqloqICKSUmk4m1a9fygx/8ACklv/jFL3j++edpb29n69at3HjjjVgsFjweDwDR0dH09fXhcDgYGRnB6/Wybt06Vq1apcVx+PBhurq6gKnOzZNPPsmf//xnenp6ePDBB6mpqcFqtSKEICYmhuTkZPr6+nA6nbjdbgwGA0ajEbfbTVtbGyMjI3g8Hqqrq9mwYQPx8fGcOHGCI0eOaN9spJTs3LmT3/72txw9epQHHniAlStXkpyczOjoKFJKoqOjMRjO/vLc29tLR0cHIyMj6PV6jEYjHo+HpqYmhoeHiY+Px2w2I6VEr9fT0NBAQ0MD7e3tZx0TCAS09jI2NkZ2djb33HMPVqsVu93OkSNHtElmKSV/+9vfePLJJzlw4AB33303a9eupbCwkJGREaSUREVFERUVda2buXIBKplHCJ/PR1tbG1JKkpOTtcTd2tpKIBDAZrORm5uLEILKykri4uIYGBigpaWF1157DYfDQVpaGps2bSI3NxeTyURMTAxpaWkYjUbMZjMmkwm9Xk9qaiobN24kKSmJEydO8Je//IXR0VEWLVrErbfeSmZmJuPj43R1ddHf349OpyMrK4uamhrKy8uxWCwMDQ3hdDoZGxvTynDs2DGCwSCJiYlIKfH7/YRCIQwGgzbGm5CQQFVVFevWraOlpYU333yTpqYm4uLi2Lx5MwUFBZjNZqKiokhLSyMqKor+/n76+voQQmhxzJ8//6w43G63luDeeOMNWlpasFqtbNq0icLCQmJjY4mKiiIxMZGYmBh6e3u1D8mMjAxMJhNut5vOzk4AMjIyqKqqYtmyZdhsNoaHh+nu7sblcmnvy/79+6mrq0Ov13PXXXdRVlaGzWZDr9eTnp6OyWT61NDMmWXJyMggJiYGr9dLe3s7ANnZ2SQlJREdHU11dTV+v5+uri7twyo9PR2z2cz4+Ditra2Ew2GSk5MpKyujtraWhIQEPB4P/f392gdtZ2cnH3zwAe+++y7BYJA777yTqqoqUlNTEUKQkpJCbGzseYeFlNmhknmEmOmdSSnJzc0lIyODUChEY2MjExMTJCUlUVRUhE6n47777mPZsmUEAgF2795Ne3s7RUVF3HTTTVRUVDA8PEwgEMBqtVJSUgJMTX729fVhNBqpqKggKiqK+vp67YNg2bJlVFVVUV5ezrx586iursbtdtPd3Y3BYGD16tVa8plx5hhrOBzm1KlTZ53T4/EQCoVwu900NDQgpSQ/P5/09HR8Ph+7d+/GbreTlpbGLbfcwoIFCxgbG2NiYoLY2FjKy8vR6XQ4HA66urowGAzcfPPNZGZmEhsb+6k43G43L7zwAq2traSnp7NixQqqqqoYGxsjEAgQFxdHSUkJQgg6Ojro6+vDYDBQUVGByWTC5XLR2toKwIoVKyguLsZisXzqvQoGg7z44oucPHkSk8nEihUrWLJkCeFwmImJCaKiopg3b96neuUAXV1dOJ1OdDod8+bNw2w2MzIyQnNzMzA1l5GWlkZCQgJf+9rXyMrKwu12a8m+tLQUq9WK1+vl9OnTSClZtGgRixYtwmq1nnWumXp57bXXOHjwIF6vl9raWpYsWYLZbMbv9yOEYN68eecspzK7VDKPEG63m/r6eqSUlJaWkp+fr00a+v1+0tPTmT9/PoD2d1gTEhLYtWsXgUCAG264gZUrVxIOh/nkk0/wer0kJiZSWVmJEIITJ07gcDiIjo5m+fLlREVFUVdXx969exFCsHHjRnJzcyksLOTRRx9lwYIFdHd309bWhsFgYPny5ZjNZgYHB7Whhvz8fBITE/H7/dTX11NRUUFubi7x8fHA1NroQCCgLW8EmD9/Pnl5eXi9Xp5//nlGR0eprKxk3bp1AJw4cQKXy4XFYmHx4sXodDpaW1tpa2tDr9ezfPly4uLiGBoa0uLIy8sjKSkJt9vNH/7wB/x+P0uXLuXWW29FSsmJEycYHR3FarVq9dHc3ExnZydGo5ElS5YQExNDT0+PNtm7ePFiUlJS8Pl8nDp1ilAoREZGBpmZmQSDQf70pz/R19dHQUEBmzZtAqCpqYmenh5MJhNVVVXnHLZob2/Hbrej0+lYsmQJcXFx2oohgPLycrKysvD7/Rw4cIDCwkICgQCnT59GCMHixYtJSkpidHSU+vp6wuEwZWVlFBYWEgqFOHXqFOPj4yQkJFBQUADAyy+/zKlTp0hISODLX/4yJpNJW90jhGDhwoXae6bMHZXMI8TY2JjW08rPz8dqtdLT08P4+Lg2Xp6ZmQnAgQMHgKnVJV1dXYTDYbKyssjNzUVKSWNjI16vF5vNxrx584Cpnnlvby9Go1H7UHC5XNqFQxUVFdhsNoQQGAwGhBA4HA66u7vR6/WUlpYyMTGB2+3G6/UihCA/P5+EhAQGBwfZuXMn8+fPJz8/H4vFgpQSr9er9cxnylZYWEhycjJer5euri6CwSCpqana6pbm5mbcbjdms1nrmTudTrq6urQ4JicntfHzmTji4uLweDx0dXURCoXIzMzUkpndbsfj8WCxWLRvDe3t7fT29p63Z15YWIjJZNLGz4UQZGZmkpaWhs/nw+l0MjExgc1mo6ysDIC2tjZcLhdRUVGUlZWds2fudDpxOBzaqhq/34/L5WJiYgKj0UhGRgY2mw2/38/+/fspLS1FCEFbWxsw1TOPj48/q2eelZVFYmIiw8PDeDwewuEwiYmJ5OXlMT4+Tk9PD2NjY0RHR1NRUYFer6e3txeHw6H1zNVSx7l30WQuhMgRQrwrhGgQQpwUQvzr9PZEIcTbQojm6fuEax+ucj4z/+mklNpYcWtrK6FQCKvVSnx8PHq9HrvdzujoKFFRUdpXZYD4+Hji4uKYmJjA6XQyPj6OxWIhOzv7rMk+o9FIUVERgUAAn8/HxMQEMDVGfObQhcvloquri6GhIXQ6HXl5efh8PtxuN1JKbDYbVqsVn8+H3W7n4MGDmM3ms5bNeb1empubaWhowOl0ApCVlaUNE/j9fqSUmM1mbDYbgUAAp9OJx+MhJiaGvLw8BgYG6O7u/lQco6OjhMNhbDYb8fHxTE5O0tvbq9WHzWYjOTkZKSVOpxOfz4fZbCY3N5dgMMjAwAButxu9Xk9+fj5+v5+BgQH6+/sByMmZ+lvng4OD2iRufHw8Op2O7u5u/H4/4XAYs9lMWloaMDW5OVPHBQUFeDwexsfHz1pqOTw8zNDQEEII8vLyGBoaore3FykliYmJmM1mvF6vtiY+LS2NcDjMwMAAQghycnLQ6XQMDg6e1V4sFgv9/f1MTk5isViIj48nJiaGrq4uvF4vwWAQg8FAZmamdnx/fz9CCAoKCgiFQng8nrNiVWbXpfTMg8C3pZTlwA3AvwghKoDvAu9IKUuAd6afK3NASsnExATDw8MAWpL8xz/+AUBKSgoxMTG4XC727t1Leno6cXFxBIPBT73GwMAAvb29BAIBoqOjSUhIoL6+HofDwdjYGHq9nszMTFwul7ZiRAhBXFwcRqMRKSXj4+M0NjbS1dXF6OgoRqORvLw8RkZGtASYlZWFXq+no6ODI0eO0NXVpV2ENDPp5/P5OHjwIB9++KGWJJOSkjAYDPT19Z0VezAY1CYH/X4/BoOBlJQUjh8/rsVuMBjIy8vD7XYzPDysxXHm6p4Z0dHRxMTEaBO5fr8fs9msHT80NITX60Wn05GcnIzD4aCzs5Ph4WF0Oh3Z2dla0gfIzMwkJiYGt9vNyZMntaRnNBq1D9Genh7tg7a4uJj29nZtwhSm5hU8Hg9jY2MIIUhKSsJut9Pa2qpNxM7Mk3z00UeUlJRgtVoJBAKMjo4CkJyczNDQEC0tLQwODqLT6UhPTyc2Nlab8ExLS9OOO378uPa+GAwGrFYrk5OTuFwuXC4Xer2ewsJCBgcHtW95yty46EVDUsoeoGf68ZgQogHIAjYBq6d3ex74b+D/XpMolQsKhUJnXfyxY8cOwuEwx48fB6Z6fK+88gqffPIJb7zxBm+//TbFxcWcOnUKo9HI5OQke/bs0ZYK6vV6bVnjL3/5S+x2Oy6XC5gam9++fTvHjh2jqakJo9FIMBikubmZ6OhofD4f77zzDlFRUUxMTGi9+5nXnLkYxWw2EwqF6OzsZHBwkEceeYQlS5bw0UcfcfToUQBMJhN33XUXdrtd+02X3bt3o9PpaG5u1mLfv38/g4OD2tCFXq+nu7tbi72jowOz2UxOTs5542hvb6e+vl57zcHBQY4fP86hQ4fw+XxIKbVVPc8995z2YeLxeHj88cex2+1aTDk5OURFRaHX67VJxJmJ34GBAQ4dOoTBYCAUCuH1erHb7Rw4cICBgQGioqJISEggKSmJH//4x9xxxx1kZ2cDUxOnZ14R+9hjj2kftKFQCKfTyc9+9jN6e3sZHBxk3759xMXFaceEw2F++tOfMjAwQHt7O0IIcnNziY2NRafTaR+iM0six8bG+PDDD7WLjwKBAB0dHbz33ns0NjYihNBi3bNnD7GxsdqwnDL7PtMVoEKIfKAKOASkTSd6pJQ9QojUqx+ecikMBgO5ubls3ryZffv2MTY2Rm1tLQ8//DA//OEP6ejooLu7m6SkJH79619rS+0yMzP59re/zY4dO2htbSUxMZGHH36Y1NRU3n77bXw+H93d3XznO98hPT2dgwcP0tHRQUNDAw899BBut5tjx46xe/duHnnkEUpKSqioqGDFihWcPn2aiYkJ4uPjtXHbsrIyli9fzscff0xLSwtPPvkka9asYePGjezatYsvfOELjIyMYLFYeOSRR3jooYfIyckhHA6zYcMG9u/fT0dHB6tWreKLX/wihw4dYteuXfT09JCYmMjXv/51MjIyeO+99xgeHsZut1NZWcmpU6cAtDjKy8tZvnw5H330ES0tLWzfvp1bbrmFbdu2kZ6ezs6dO3nllVdoamqiurqam2++mZMnT3L69Gkef/xx7r//frq7u/nggw9oamqis7OTqqoqgsEgg4OD2kqU3Nxcli1bRk1NDW1tbTz77LOsXr2arVu3YrFY2LNnD3V1dXzrW99Cr9czOjqKwWDA4/Hwve99j/Xr11NRUaG9z0ajkRtvvJG+vj4OHz7M4OAg3/zmN+nt7eWFF16gra0Nu93OihUrWLNmDUlJSej1eqqrq1mzZg3vv/8+XV1dFBcXEx8fT0NDgzbenZSUxNKlS6mpqcHhcPDqq6/i8XjYunUriYmJvPnmm5w+fZpt27ah1+u1cXuj0cj3v/99VqxYcVasyuy75GQuhLAA/wX8m5Ry9FIv3RVCbAW2AuTm5l5OjMolyMrK4p577qG4uJiMjAzmz59PZWUlX/3qV+np6SE6Oprs7GxWrlyJ2WxGp9Nhs9lYv349RqMRvV5PQUEB1dXV6HQ6CgoKCAaDZGdns2DBAu666y7Ky8vp7e0lKyuLZcuWMTk5SWFhoTZenZKSQn5+PgUFBRgMBu6//34mJye15XwWi4Xq6mq2bNmCw+GgqKiIoqIiMjMztTXORqORlJQUFi5cyLx589DpdOTn53PvvfdSXl5OWloaCxYsoLKyUlvfPDk5SVpaGosWLUIIQXFxMSMjI2RmZlJaWkpMTAx+v1+LIzY2lsWLF7NlyxY6OzspKiqiuLiY4uJiNmzYoK0iSUpKYsGCBSQkJNDZ2cnk5CTp6ekUFxezfv16SktL6ezsJDs7m5KSEoqKiqipqaGsrIyYmBiio6MpKChgy5YtdHR0kJGRQUlJCYWFhaxfvx6r1UpnZycul4uGhgYmJydJTk6moKCA0tJS5s2bd9ZPJgghWLFiBXFxcdTU1FBQUMDKlSsZGxsjNjYWp9NJWloaCxcuZMmSJdoEalVVFTC1wiY3N5fc3FzGx8dJS0ujsrKS9PR0rd4feOABHA4HFouFoqIi8vLyWLt2LcnJyZw6dUqL1e/3Ex0dTW5uLqWlpZSVlWkT7MrcEJcyYSGEMAKvA3+TUv58ettpYPV0rzwD+G8p5QW/Yy1dulTOLDFTlOudx+PB4XBw9OhRfvKTn2C325k/fz4bN27k8ccfn+vwzuL3+xkcHKSuro4f/ehH2O12LBYLmzdvZvv27RiNxrkOMaIJIeqklEsvtM9Fe+Ziqgv+LNAwk8invQpsAf7f9P1fryBWRbnu7Nixg7GxMTIyMrRtxcXFrF69eu6COo99+/Zx8OBBFi1apG1LTk7mjjvuUFd+fk5cymqWWuB+4FYhRP307U6mkvhaIUQzsHb6uaIol6ihoYHh4WFKSkqw2+0YjUZKS0upqamZ69A+xeFw0NzczIIFC7Qhp6ysLFatWnXOX4NUZt+lrGZ5HzjfAPltVzccRbl+pKSk0NnZyYsvvojVauX222+npqbmc/m76FarFaPRyHPPPYfJZKKmpobbb79dXcb/OaJ+z1xR5khlZSWDg4McPnyYG264ga985SssXLhwrsM6p/z8fIqKinjrrbdYtGgRX/rSl1i1atVch6Wc4ZImQK8WNQGqKIry2V3KBKga7FIURYkAKpkriqJEAJXMFUVRIoBK5oqiKBFAJXNFUZQIoJK5oihKBFDJXFEUJQKoZK4oihIBZvWiISHEAOAFXLN20s+nZFQdqDqYoupB1cGMC9VDnpQy5UIHz2oyBxBCHLnYlUyRTtWBqoMZqh5UHcy40npQwyyKoigRQCVzRVGUCDAXyfx3c3DOzxtVB6oOZqh6UHUw44rqYdbHzBVFUZSrTw2zKIqiRIBZS+ZCiNuFEKeFEHYhxHdn67xzTQjRLoQ4Pv3n9o5Mb0sUQrwthGievk+Y6zivNiHETiFEvxDixBnbzltuIcSj023jtBDi/8xN1FfXeergcSFE1z/9CcaZf4vEOsgRQrwrhGgQQpwUQvzr9PbrrS2crx6uXnuQUl7zG6AHWoBCIAr4BKiYjXPP9Q1oB5L/aduTwHenH38X+Olcx3kNyn0TUA2cuFi5gYrpNmECCqbbin6uy3CN6uBx4Dvn2DdS6yADqJ5+HAc0TZf1emsL56uHq9YeZqtnvhywSylbpZQBYDewaZbO/Xm0CXh++vHzwF1zF8q1IaV8Dxj6p83nK/cmYLeUckJK2QbYmWoz/6udpw7OJ1LroEdK+Y/px2NAA5DF9dcWzlcP5/OZ62G2knkW4DjjuZMLFySSSOAtIUSdEGLr9LY0KWUPTL3JQOqcRTe7zlfu6619fEMIcWx6GGZmeCHi60AIkQ9UAYe4jtvCP9UDXKX2MFvJXJxj2/WyjKZWSlkN3AH8ixDiprkO6HPoemofzwBFwGKgB9g+vT2i60AIYQH+C/g3KeXohXY9x7ZIroer1h5mK5k7gZwznmcD3bN07jklpeyevu8H/sLUV6U+IUQGwPR9/9xFOKvOV+7rpn1IKfuklCEpZRj4T/7nq3PE1oEQwshUAvuTlPLl6c3XXVs4Vz1czfYwW8n8MFAihCgQQkQB9wCvztK554wQwiyEiJt5DKwDTjBV9i3Tu20B/jo3Ec6685X7VeAeIYRJCFEAlAAfz0F819xMApu2man2ABFaB0IIATwLNEgpf37GP11XbeF89XBV28MszubeydQMbgvw73M9uzxLZS5kakb6E+DkTLmBJOAdoHn6PnGuY70GZX+Bqa+Nk0z1Mh66ULmBf59uG6eBO+Y6/mtYB7uA48Cx6f+wGRFeByuZGh44BtRP3+68DtvC+erhqrUHdQWooihKBFBXgCqKokQAlcwVRVEigErmiqIoEUAlc0VRlAigkrmiKEoEUMlcURQlAqhkriiKEgFUMlcURYkA/x9JdyksGPA7OAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Plot a few examples\n",
"for i in range(10):\n",
" plt.imshow(x_train[i], cmap='gray')\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 110
},
"id": "JzGvyWyNYykQ",
"outputId": "f276de97-755c-4416-8b5d-e6feb2d10a6c"
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Plot mean image\n",
"plt.imshow(x_train.mean(0), cmap='gray');"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Plot median image\n",
"plt.imshow(np.median(x_train, axis=0), cmap='gray');"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Plot std image\n",
"plt.imshow(np.std(x_train, axis=0), cmap='gray');"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "3Me9pT-9X-dd"
},
"source": [
"# Step 4 - Setup SimpleHTR\n",
"\n",
"The code for this model is taken from [SimpleHTR](https://github.com/githubharald/SimpleHTR). A CNN-RNN model that is able to read handwritten text. I've adapted the code slightly (to make it work for the new image dimension) and added an additional correction algorithm that does spell checking based on the words in the training set.\n",
"\n",
"To run SimpleHTR we need some additional libraries."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "gYglKMuGYNWu",
"outputId": "d3c8b7c5-d71d-408f-ca5c-ccc71175f921"
},
"outputs": [],
"source": [
"!pip install -U editdistance opencv-python tensorflow==2.4.0"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"id": "c0BMg2EJY2wz"
},
"outputs": [],
"source": [
"# Data needs to be transposed for SimpleHTR (del command is to save memory)\n",
"x_htr_tr = np.rollaxis(x_train, 2, 1)\n",
"del x_train\n",
"x_htr_va = np.rollaxis(x_val, 2, 1)\n",
"del x_val\n",
"x_htr_te = np.rollaxis(x_test, 2, 1)\n",
"del x_test"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "SXvJ6f4sY-9m"
},
"source": [
"## Save images to npy\n",
"\n",
"To make the dataset work with SimpleHTR, I stored it in a similar format as the one it was trained on."
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"id": "hJ1aHKXaZEEV"
},
"outputs": [],
"source": [
"import os\n",
"for d in ['data_tr', 'data_val', 'data_te']:\n",
" if not os.path.exists(d):\n",
" os.makedirs(d)"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "6-FfAvdpZJsq",
"outputId": "20cf4036-9e64-4dc0-8b1b-01e69326398c"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 32.1 s, sys: 16.1 s, total: 48.2 s\n",
"Wall time: 53.2 s\n"
]
}
],
"source": [
"%%time\n",
"for i, x in enumerate(x_htr_tr):\n",
" np.savez_compressed('data_tr/%05d' % (i + 1), img=x)\n",
" np.savetxt('data_tr/%05d.txt' % (i + 1), [label_train[i]], fmt='%s')\n",
"del x_htr_tr"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "CsM11rc1ZK_h",
"outputId": "4e2315ea-a022-4cd9-c715-4da2010d3346"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 3.41 s, sys: 1.89 s, total: 5.3 s\n",
"Wall time: 5.58 s\n"
]
}
],
"source": [
"%%time\n",
"for i, x in enumerate(x_htr_va):\n",
" np.savez_compressed('data_val/%05d' % (i + 1), img=x)\n",
" np.savetxt('data_val/%05d.txt' % (i + 1), [label_val[i]], fmt='%s')\n",
"del x_htr_va"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "4ZM96SOgZMKa",
"outputId": "f354f3fb-e211-4d9f-fff2-ee9c3b0bcc87"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 7.01 s, sys: 2.92 s, total: 9.94 s\n",
"Wall time: 11.6 s\n"
]
}
],
"source": [
"%%time\n",
"for i, x in enumerate(x_htr_te):\n",
" np.savez_compressed('data_te/%05d' % (i + 1), img=x)\n",
"del x_htr_te"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "YnJ23lzSZTPM"
},
"source": [
"## Adaptation 1 - of code in `DataLoader.py`"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"id": "qB4TZ-5WZNFk"
},
"outputs": [],
"source": [
"import random\n",
"from os.path import join as opj"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"id": "rqLEdXY-ZWtH"
},
"outputs": [],
"source": [
"class Sample:\n",
" \"sample from the dataset\"\n",
"\n",
" def __init__(self, gtText, filePath):\n",
" self.gtText = gtText\n",
" self.filePath = filePath"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"id": "4Wi8mKONZYDz"
},
"outputs": [],
"source": [
"class Batch:\n",
" \"batch containing images and ground truth texts\"\n",
"\n",
" def __init__(self, gtTexts, imgs):\n",
" self.imgs = np.stack(imgs, axis=0)\n",
" self.gtTexts = gtTexts"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The following Class was adapted to allow the test and prediction routine. And I've changed it from the original to directly read the images and text from the stored files, instead of using the original's strange dataframework."
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"id": "CdL30gKGZZTY"
},
"outputs": [],
"source": [
"class DataLoader:\n",
"\n",
" def __init__(self, batchSize, imgSize, maxTextLen, nEpoch=20000):\n",
" \"load images and texts at given location\"\n",
"\n",
" self.currIdx = 0\n",
" self.batchSize = batchSize\n",
" self.imgSize = imgSize\n",
" self.samples = []\n",
" self.tests = []\n",
" self.predictions = []\n",
" \n",
" # Load training files\n",
" files_tr = sorted(glob(opj('data_tr', '*npz')))\n",
" chars = set()\n",
" for fileName in files_tr:\n",
"\n",
" with open(fileName.replace('.npz', '.txt')) as ftxt:\n",
" gtText = ftxt.readline().strip()\n",
"\n",
" chars = chars.union(set(list(gtText)))\n",
"\n",
" # put sample into list\n",
" self.samples.append(Sample(gtText, fileName))\n",
"\n",
" # Load validation files\n",
" files_val = sorted(glob(opj('data_val', '*npz')))\n",
" for fileName in files_val:\n",
"\n",
" with open(fileName.replace('.npz', '.txt')) as ftxt:\n",
" gtText = ftxt.readline().strip()\n",
"\n",
" # put sample into list\n",
" self.tests.append(Sample(gtText, fileName))\n",
"\n",
" # Load prediction files\n",
" files_pred = sorted(glob(opj('data_te', '*npz')))\n",
" for fileName in files_pred:\n",
" # put sample into list\n",
" self.predictions.append(Sample('test', fileName))\n",
" \n",
" # split into training and validation set: 80% - 20%\n",
" splitIdx = int(0.8 * len(self.samples))\n",
" self.trainSamples = self.samples[:splitIdx]\n",
" self.validationSamples = self.samples[splitIdx:]\n",
" self.testSamples = self.tests\n",
" self.predSamples = self.predictions\n",
"\n",
" # put words into lists\n",
" self.trainWords = [x.gtText for x in self.trainSamples]\n",
" self.validationWords = [x.gtText for x in self.validationSamples]\n",
"\n",
" # number of randomly chosen samples per epoch for training\n",
" self.numTrainSamplesPerEpoch = nEpoch\n",
"\n",
" # start with train set\n",
" self.trainSet()\n",
"\n",
" # list of all chars in dataset\n",
" self.charList = sorted(list(chars))\n",
"\n",
" def truncateLabel(self, text, maxTextLen):\n",
" # ctc_loss can't compute loss if it cannot find a mapping between text label and input\n",
" # labels. Repeat letters cost double because of the blank symbol needing to be inserted.\n",
" # If a too-long label is provided, ctc_loss returns an infinite gradient\n",
" cost = 0\n",
" for i in range(len(text)):\n",
" if i != 0 and text[i] == text[i - 1]:\n",
" cost += 2\n",
" else:\n",
" cost += 1\n",
" if cost > maxTextLen:\n",
" return text[:i]\n",
" return text\n",
"\n",
" def trainSet(self):\n",
" \"switch to randomly chosen subset of training set\"\n",
" self.currIdx = 0\n",
" random.shuffle(self.trainSamples)\n",
" self.samples = self.trainSamples[:self.numTrainSamplesPerEpoch]\n",
" self.currSet = 'train'\n",
"\n",
" def validationSet(self):\n",
" \"switch to validation set\"\n",
" self.currIdx = 0\n",
" self.samples = self.validationSamples\n",
" self.currSet = 'val'\n",
"\n",
" def testSet(self):\n",
" \"switch to test set\"\n",
" self.currIdx = 0\n",
" self.samples = self.testSamples\n",
" self.currSet = 'tes'\n",
"\n",
" def predictionSet(self):\n",
" \"switch to pred set\"\n",
" self.currIdx = 0\n",
" self.samples = self.predSamples\n",
" self.currSet = 'pred'\n",
"\n",
" def getIteratorInfo(self):\n",
" \"current batch index and overall number of batches\"\n",
" if self.currSet == 'train':\n",
" numBatches = int(np.floor(len(self.samples) / self.batchSize)) # train set: only full-sized batches\n",
" else:\n",
" numBatches = int(np.ceil(len(self.samples) / self.batchSize)) # val set: allow last batch to be smaller\n",
" currBatch = self.currIdx // self.batchSize + 1\n",
" return currBatch, numBatches\n",
"\n",
" def hasNext(self):\n",
" \"iterator\"\n",
" if self.currSet == 'train':\n",
" return self.currIdx + self.batchSize <= len(self.samples) # train set: only full-sized batches\n",
" else:\n",
" return self.currIdx < len(self.samples) # val set: allow last batch to be smaller\n",
"\n",
" def getNext(self):\n",
" \"iterator\"\n",
" batchRange = range(self.currIdx, min(self.currIdx + self.batchSize, len(self.samples)))\n",
" gtTexts = [self.samples[i].gtText for i in batchRange]\n",
"\n",
" imgs = []\n",
" for i in batchRange:\n",
" img = np.load(self.samples[i].filePath, allow_pickle=True)['img']\n",
" imgs.append(img)\n",
"\n",
" self.currIdx += self.batchSize\n",
" return Batch(gtTexts, imgs)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "vx-0Un34ZcDi"
},
"source": [
"## Adaptation 2 - of code in `Model.py`"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"id": "0OoWNQ-7Zbev"
},
"outputs": [],
"source": [
"import os\n",
"for d in ['model', 'dump']:\n",
" if not os.path.exists(d):\n",
" os.makedirs(d)"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"id": "0OoWNQ-7Zbev"
},
"outputs": [],
"source": [
"# Create list of all words\n",
"words = np.array(list(label_train) + list(label_val))\n",
"np.savetxt('model/corpus.txt', [' '.join(words)], fmt='%s')\n",
"\n",
"# Create list of all characters\n",
"np.savetxt('model/charList.txt', [unique_letters], fmt='%s')\n",
"np.savetxt('model/wordCharList.txt', [unique_letters], fmt='%s')"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"id": "FRXGeHO5ZgO_"
},
"outputs": [],
"source": [
"import os\n",
"import tensorflow as tf\n",
"\n",
"# Disable eager mode\n",
"tf.compat.v1.disable_eager_execution()"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"id": "fwSN1hsYZh0y"
},
"outputs": [],
"source": [
"class DecoderType:\n",
" BestPath = 0\n",
" BeamSearch = 1\n",
" WordBeamSearch = 2"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"id": "BAnE3846ZjFS"
},
"outputs": [],
"source": [
"class Model:\n",
" \"minimalistic TF model for HTR\"\n",
"\n",
" # model constants\n",
" imgSize = (256, 32)\n",
" maxTextLen = 32\n",
"\n",
" def __init__(self, charList, decoderType=DecoderType.BestPath, mustRestore=False, dump=False, corpus=None):\n",
" \"init model: add CNN, RNN and CTC and initialize TF\"\n",
" self.dump = dump\n",
" self.charList = charList\n",
" self.decoderType = decoderType\n",
" self.mustRestore = mustRestore\n",
" self.snapID = 0\n",
" self.corpus = corpus\n",
"\n",
" # Whether to use normalization over a batch or a population\n",
" self.is_train = tf.compat.v1.placeholder(tf.bool, name='is_train')\n",
"\n",
" # input image batch\n",
" self.inputImgs = tf.compat.v1.placeholder(tf.float32, shape=(None, Model.imgSize[0], Model.imgSize[1]))\n",
"\n",
" # setup CNN, RNN and CTC\n",
" self.setupCNN()\n",
" self.setupRNN()\n",
" self.setupCTC()\n",
"\n",
" # setup optimizer to train NN\n",
" self.batchesTrained = 0\n",
" self.update_ops = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.UPDATE_OPS)\n",
" with tf.control_dependencies(self.update_ops):\n",
" self.optimizer = tf.compat.v1.train.AdamOptimizer().minimize(self.loss)\n",
"\n",
" # initialize TF\n",
" (self.sess, self.saver) = self.setupTF()\n",
"\n",
" def setupCNN(self):\n",
" \"create CNN layers and return output of these layers\"\n",
" cnnIn4d = tf.expand_dims(input=self.inputImgs, axis=3)\n",
"\n",
" # list of parameters for the layers\n",
" kernelVals = [5, 5, 3, 3, 3]\n",
" featureVals = [1, 32, 64, 128, 128, 256]\n",
" strideVals = poolVals = [(2, 2), (2, 2), (1, 2), (1, 2), (1, 2)]\n",
" numLayers = len(strideVals)\n",
"\n",
" # create layers\n",
" pool = cnnIn4d # input to first CNN layer\n",
" for i in range(numLayers):\n",
" kernel = tf.Variable(\n",
" tf.random.truncated_normal([kernelVals[i], kernelVals[i], featureVals[i], featureVals[i + 1]],\n",
" stddev=0.1))\n",
" conv = tf.nn.conv2d(input=pool, filters=kernel, padding='SAME', strides=(1, 1, 1, 1))\n",
" conv_norm = tf.compat.v1.layers.batch_normalization(conv, training=self.is_train)\n",
" relu = tf.nn.relu(conv_norm)\n",
" pool = tf.nn.max_pool2d(input=relu, ksize=(1, poolVals[i][0], poolVals[i][1], 1),\n",
" strides=(1, strideVals[i][0], strideVals[i][1], 1), padding='VALID')\n",
"\n",
" self.cnnOut4d = pool\n",
"\n",
" def setupRNN(self):\n",
" \"create RNN layers and return output of these layers\"\n",
" rnnIn3d = tf.squeeze(self.cnnOut4d, axis=[2])\n",
"\n",
" # basic cells which is used to build RNN\n",
" numHidden = 256\n",
" cells = [tf.compat.v1.nn.rnn_cell.LSTMCell(num_units=numHidden, state_is_tuple=True) for _ in\n",
" range(2)] # 2 layers\n",
"\n",
" # stack basic cells\n",
" stacked = tf.compat.v1.nn.rnn_cell.MultiRNNCell(cells, state_is_tuple=True)\n",
"\n",
" # bidirectional RNN\n",
" # BxTxF -> BxTx2H\n",
" ((fw, bw), _) = tf.compat.v1.nn.bidirectional_dynamic_rnn(cell_fw=stacked, cell_bw=stacked, inputs=rnnIn3d,\n",
" dtype=rnnIn3d.dtype)\n",
"\n",
" # BxTxH + BxTxH -> BxTx2H -> BxTx1X2H\n",
" concat = tf.expand_dims(tf.concat([fw, bw], 2), 2)\n",
"\n",
" # project output to chars (including blank): BxTx1x2H -> BxTx1xC -> BxTxC\n",
" kernel = tf.Variable(tf.random.truncated_normal([1, 1, numHidden * 2, len(self.charList) + 1], stddev=0.1))\n",
" self.rnnOut3d = tf.squeeze(tf.nn.atrous_conv2d(value=concat,\n",
" filters=kernel, rate=1, padding='SAME'), axis=[2])\n",
"\n",
" def setupCTC(self):\n",
" \"create CTC loss and decoder and return them\"\n",
" # BxTxC -> TxBxC\n",
" self.ctcIn3dTBC = tf.transpose(a=self.rnnOut3d, perm=[1, 0, 2])\n",
" # ground truth text as sparse tensor\n",
" self.gtTexts = tf.SparseTensor(tf.compat.v1.placeholder(tf.int64, shape=[None, 2]),\n",
" tf.compat.v1.placeholder(tf.int32, [None]),\n",
" tf.compat.v1.placeholder(tf.int64, [2]))\n",
"\n",
" # calc loss for batch\n",
" self.seqLen = tf.compat.v1.placeholder(tf.int32, [None])\n",
" self.loss = tf.reduce_mean(input_tensor=tf.compat.v1.nn.ctc_loss(labels=self.gtTexts, inputs=self.ctcIn3dTBC,\n",
" sequence_length=self.seqLen,\n",
" ctc_merge_repeated=True))\n",
"\n",
" # calc loss for each element to compute label probability\n",
" self.savedCtcInput = tf.compat.v1.placeholder(tf.float32,\n",
" shape=[Model.maxTextLen, None, len(self.charList) + 1])\n",
" self.lossPerElement = tf.compat.v1.nn.ctc_loss(labels=self.gtTexts, inputs=self.savedCtcInput,\n",
" sequence_length=self.seqLen, ctc_merge_repeated=True)\n",
"\n",
" # decoder: either best path decoding or beam search decoding\n",
" if self.decoderType == DecoderType.BestPath:\n",
" self.decoder = tf.nn.ctc_greedy_decoder(inputs=self.ctcIn3dTBC, sequence_length=self.seqLen)\n",
" elif self.decoderType == DecoderType.BeamSearch:\n",
" self.decoder = tf.nn.ctc_beam_search_decoder(inputs=self.ctcIn3dTBC, sequence_length=self.seqLen,\n",
" beam_width=50)\n",
" elif self.decoderType == DecoderType.WordBeamSearch:\n",
" # import compiled word beam search operation (see https://github.com/githubharald/CTCWordBeamSearch)\n",
" word_beam_search_module = tf.load_op_library('TFWordBeamSearch.so')\n",
"\n",
" # prepare information about language (dictionary, characters in dataset, characters forming words)\n",
" chars = str().join(self.charList)\n",
" wordChars = open('model/wordCharList.txt').read().splitlines()[0]\n",
" corpus = open('model/corpus.txt').read()\n",
"\n",
" # decode using the \"Words\" mode of word beam search\n",
" self.decoder = word_beam_search_module.word_beam_search(\n",
" tf.nn.softmax(self.ctcIn3dTBC, axis=2), 50, 'Words',\n",
" 0.0, corpus.encode('utf8'), chars.encode('utf8'),\n",
" wordChars.encode('utf8'))\n",
"\n",
" def setupTF(self):\n",
" \"initialize TF\"\n",
" print('Tensorflow: ' + tf.__version__)\n",
"\n",
" sess = tf.compat.v1.Session() # TF session\n",
"\n",
" saver = tf.compat.v1.train.Saver(max_to_keep=1) # saver saves model to file\n",
" modelDir = 'model/'\n",
" latestSnapshot = tf.train.latest_checkpoint(modelDir) # is there a saved model?\n",
"\n",
" # if model must be restored (for inference), there must be a snapshot\n",
" if self.mustRestore and not latestSnapshot:\n",
" raise Exception('No saved model found in: ' + modelDir)\n",
"\n",
" # load saved model if available\n",
" if latestSnapshot:\n",
" print('Init with stored values from ' + latestSnapshot)\n",
" saver.restore(sess, latestSnapshot)\n",
" else:\n",
" print('Init with new values')\n",
" sess.run(tf.compat.v1.global_variables_initializer())\n",
"\n",
" return (sess, saver)\n",
"\n",
" def toSparse(self, texts):\n",
" \"put ground truth texts into sparse tensor for ctc_loss\"\n",
" indices = []\n",
" values = []\n",
" shape = [len(texts), 0] # last entry must be max(labelList[i])\n",
"\n",
" # go over all texts\n",
" for (batchElement, text) in enumerate(texts):\n",
" # convert to string of label (i.e. class-ids)\n",
" labelStr = [self.charList.index(c) for c in text]\n",
" # sparse tensor must have size of max. label-string\n",
" if len(labelStr) > shape[1]:\n",
" shape[1] = len(labelStr)\n",
" # put each label into sparse tensor\n",
" for (i, label) in enumerate(labelStr):\n",
" indices.append([batchElement, i])\n",
" values.append(label)\n",
"\n",
" return (indices, values, shape)\n",
"\n",
" def decoderOutputToText(self, ctcOutput, batchSize):\n",
" \"extract texts from output of CTC decoder\"\n",
"\n",
" # contains string of labels for each batch element\n",
" encodedLabelStrs = [[] for i in range(batchSize)]\n",
"\n",
" # word beam search: label strings terminated by blank\n",
" if self.decoderType == DecoderType.WordBeamSearch:\n",
" blank = len(self.charList)\n",
" for b in range(batchSize):\n",
" for label in ctcOutput[b]:\n",
" if label == blank:\n",
" break\n",
" encodedLabelStrs[b].append(label)\n",
"\n",
" # TF decoders: label strings are contained in sparse tensor\n",
" else:\n",
" # ctc returns tuple, first element is SparseTensor\n",
" decoded = ctcOutput[0][0]\n",
"\n",
" # go over all indices and save mapping: batch -> values\n",
" idxDict = {b: [] for b in range(batchSize)}\n",
" for (idx, idx2d) in enumerate(decoded.indices):\n",
" label = decoded.values[idx]\n",
" batchElement = idx2d[0] # index according to [b,t]\n",
" encodedLabelStrs[batchElement].append(label)\n",
"\n",
" # map labels to chars for all batch elements\n",
" return [str().join([self.charList[c] for c in labelStr]) for labelStr in encodedLabelStrs]\n",
"\n",
" def trainBatch(self, batch):\n",
" \"feed a batch into the NN to train it\"\n",
" numBatchElements = len(batch.imgs)\n",
" sparse = self.toSparse(batch.gtTexts)\n",
" evalList = [self.optimizer, self.loss]\n",
" feedDict = {self.inputImgs: batch.imgs,\n",
" self.gtTexts: sparse,\n",
" self.seqLen: [Model.maxTextLen] * numBatchElements,\n",
" self.is_train: True}\n",
" _, lossVal = self.sess.run(evalList, feedDict)\n",
" self.batchesTrained += 1\n",
" return lossVal\n",
"\n",
" def dumpNNOutput(self, rnnOutput):\n",
" \"dump the output of the NN to CSV file(s)\"\n",
" dumpDir = 'dump/'\n",
" if not os.path.isdir(dumpDir):\n",
" os.mkdir(dumpDir)\n",
"\n",
" # iterate over all batch elements and create a CSV file for each one\n",
" maxT, maxB, maxC = rnnOutput.shape\n",
" for b in range(maxB):\n",
" csv = ''\n",
" for t in range(maxT):\n",
" for c in range(maxC):\n",
" csv += str(rnnOutput[t, b, c]) + ';'\n",
" csv += '\\n'\n",
" fn = dumpDir + 'rnnOutput_' + str(b) + '.csv'\n",
" print('Write dump of NN to file: ' + fn)\n",
" with open(fn, 'w') as f:\n",
" f.write(csv)\n",
"\n",
" def inferBatch(self, batch, calcProbability=False, probabilityOfGT=False):\n",
" \"feed a batch into the NN to recognize the texts\"\n",
"\n",
" # decode, optionally save RNN output\n",
" numBatchElements = len(batch.imgs)\n",
" evalRnnOutput = self.dump or calcProbability\n",
" evalList = [self.decoder] + ([self.ctcIn3dTBC] if evalRnnOutput else [])\n",
" feedDict = {self.inputImgs: batch.imgs, self.seqLen: [Model.maxTextLen] * numBatchElements,\n",
" self.is_train: False}\n",
" evalRes = self.sess.run(evalList, feedDict)\n",
" decoded = evalRes[0]\n",
" texts = self.decoderOutputToText(decoded, numBatchElements)\n",
"\n",
" # feed RNN output and recognized text into CTC loss to compute labeling probability\n",
" probs = None\n",
" if calcProbability:\n",
" sparse = self.toSparse(batch.gtTexts) if probabilityOfGT else self.toSparse(texts)\n",
" ctcInput = evalRes[1]\n",
" evalList = self.lossPerElement\n",
" feedDict = {self.savedCtcInput: ctcInput, self.gtTexts: sparse,\n",
" self.seqLen: [Model.maxTextLen] * numBatchElements, self.is_train: False}\n",
" lossVals = self.sess.run(evalList, feedDict)\n",
" probs = np.exp(-lossVals)\n",
"\n",
" # dump the output of the NN to CSV file(s)\n",
" if self.dump:\n",
" self.dumpNNOutput(evalRes[1])\n",
"\n",
" return (texts, probs)\n",
"\n",
" def save(self):\n",
" \"save model to file\"\n",
" self.snapID += 1\n",
" self.saver.save(self.sess, 'model/snapshot', global_step=self.snapID)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "zxd_eS0RZlDo"
},
"source": [
"## Adaptation 3 - of code in `Main.py`"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"id": "mAGt6KFKZlxg"
},
"outputs": [],
"source": [
"import cv2\n",
"import editdistance"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"id": "Bw5w2JOUZrBm"
},
"outputs": [],
"source": [
"class FilePaths:\n",
" \"filenames and paths to data\"\n",
" fnCharList = 'model/charList.txt'\n",
" fnAccuracy = 'model/accuracy.txt'\n",
" fnInfer = 'data/test.png'\n",
" fnCorpus = 'model/corpus.txt'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here I've added this function that looks through the corpus of all words used in the training dataset and suggests a typo correctio if the predicted word is only less than 2 changes (i.e. thresh=2) away from a word in the corpus."
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [],
"source": [
"def find_closest(word, corpus, thresh=2):\n",
" \"\"\"Correct typos in text based on corpus\"\"\"\n",
" \n",
" answer = []\n",
"\n",
" for check in word.split():\n",
" # Compute distance to words in corpus\n",
" dist = np.array([editdistance.eval(check, w) for w in corpus])\n",
"\n",
" # Replace words if close ones can be found, else leave them\n",
" if len(np.argwhere(dist<=thresh)):\n",
" check = corpus[dist.argmin()]\n",
" answer.append(check)\n",
" return ' '.join(answer)"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"id": "ZH_Woqa2ZsOL"
},
"outputs": [],
"source": [
"def train(model, loader):\n",
" \"train NN\"\n",
" epoch = 0 # number of training epochs since start\n",
" bestCharErrorRate = float('inf') # best valdiation character error rate\n",
" noImprovementSince = 0 # number of epochs no improvement of character error rate occured\n",
" earlyStopping = 25 # stop training after this number of epochs without improvement\n",
" while True:\n",
" epoch += 1\n",
" print('Epoch:', epoch)\n",
"\n",
" # train\n",
" print('Train NN')\n",
" loader.trainSet()\n",
" while loader.hasNext():\n",
" iterInfo = loader.getIteratorInfo()\n",
" batch = loader.getNext()\n",
" loss = model.trainBatch(batch)\n",
" print(f'Epoch: {epoch} Batch: {iterInfo[0]}/{iterInfo[1]} Loss: {loss}')\n",
"\n",
" # validate\n",
" charErrorRate = validate(model, loader)\n",
"\n",
" # if best validation accuracy so far, save model parameters\n",
" if charErrorRate < bestCharErrorRate:\n",
" print('Character error rate improved, save model')\n",
" bestCharErrorRate = charErrorRate\n",
" noImprovementSince = 0\n",
" model.save()\n",
" open(FilePaths.fnAccuracy, 'w').write(\n",
" f'Validation character error rate of saved model: {charErrorRate * 100.0}%')\n",
" else:\n",
" print(f'Character error rate not improved, best so far: {bestCharErrorRate * 100.0}%')\n",
" noImprovementSince += 1\n",
"\n",
" # stop training if no more improvement in the last x epochs\n",
" if noImprovementSince >= earlyStopping:\n",
" print(f'No more improvement since {earlyStopping} epochs. Training stopped.')\n",
" break"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"id": "Vmq_SQ5nZtyH"
},
"outputs": [],
"source": [
"def validate(model, loader):\n",
" \"validate NN\"\n",
" print('Validate NN')\n",
" loader.validationSet()\n",
" numCharErr = 0\n",
" numCharTotal = 0\n",
" numWordOK = 0\n",
" numWordTotal = 0\n",
" while loader.hasNext():\n",
" iterInfo = loader.getIteratorInfo()\n",
" print(f'Batch: {iterInfo[0]} / {iterInfo[1]}')\n",
" batch = loader.getNext()\n",
" (recognized, _) = model.inferBatch(batch)\n",
"\n",
" print('Ground truth -> Recognized')\n",
" for i in range(len(recognized)):\n",
" numWordOK += 1 if batch.gtTexts[i] == recognized[i] else 0\n",
" numWordTotal += 1\n",
" dist = editdistance.eval(recognized[i], batch.gtTexts[i])\n",
" numCharErr += dist\n",
" numCharTotal += len(batch.gtTexts[i])\n",
" #print('[OK]' if dist == 0 else '[ERR:%d]' % dist, '\"' + batch.gtTexts[i] + '\"', '->', '\"' + recognized[i] + '\"')\n",
"\n",
" # print validation result\n",
" charErrorRate = numCharErr / numCharTotal\n",
" wordAccuracy = numWordOK / numWordTotal\n",
" print(f'Character error rate: {charErrorRate * 100.0}%. Word accuracy: {wordAccuracy * 100.0}%.')\n",
" return charErrorRate"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [],
"source": [
"def testtest(model, loader):\n",
" \"test NN\"\n",
" print('Test NN')\n",
" loader.testSet()\n",
" numCharErr = 0\n",
" numCharTotal = 0\n",
" numWordOK = 0\n",
" numWordTotal = 0\n",
" while loader.hasNext():\n",
" iterInfo = loader.getIteratorInfo()\n",
" print(f'Batch: {iterInfo[0]} / {iterInfo[1]}')\n",
" batch = loader.getNext()\n",
" (recognized, _) = model.inferBatch(batch)\n",
"\n",
" print('Ground truth -> Recognized')\n",
" for i in range(len(recognized)):\n",
" \n",
" # Typo correction\n",
" recognized[i] = find_closest(recognized[i], model.corpus)\n",
"\n",
" numWordOK += 1 if batch.gtTexts[i] == recognized[i] else 0\n",
" numWordTotal += 1\n",
" dist = editdistance.eval(recognized[i], batch.gtTexts[i])\n",
" numCharErr += dist\n",
" numCharTotal += len(batch.gtTexts[i])\n",
" print('[OK]' if dist == 0 else '[ERR:%d]' % dist, '\"' + batch.gtTexts[i] + '\"', '->', '\"' + recognized[i] + '\"')\n",
"\n",
" # print test result\n",
" charErrorRate = numCharErr / numCharTotal\n",
" wordAccuracy = numWordOK / numWordTotal\n",
" print(f'Character error rate: {charErrorRate * 100.0}%. Word accuracy: {wordAccuracy * 100.0}%.')\n",
" return charErrorRate"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [],
"source": [
"def predpred(model, loader):\n",
" \n",
" # Collect response\n",
" response = []\n",
" \n",
" \"pred NN\"\n",
" print('Prediction NN')\n",
" loader.predictionSet()\n",
" while loader.hasNext():\n",
" iterInfo = loader.getIteratorInfo()\n",
" print(f'Batch: {iterInfo[0]} / {iterInfo[1]}')\n",
" batch = loader.getNext()\n",
" (recognized, _) = model.inferBatch(batch)\n",
"\n",
" for i in range(len(recognized)):\n",
" \n",
" # Typo correction\n",
" recognized[i] = find_closest(recognized[i], model.corpus, thresh=2)\n",
" response.append(recognized[i])\n",
"\n",
" return response"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Step 5 - Run the model\n",
"\n",
"Finding optimal batch size and number of epochs took some time, and was just based on trail and error."
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [],
"source": [
"# Specify model specific parameters\n",
"batch_size = 500\n",
"imgSize = (256, 32)\n",
"maxTextLen = 32\n",
"nEpoch = 25000"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Train the model"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [],
"source": [
"# Specify parameters\n",
"decoderType = DecoderType.BeamSearch\n",
"loader = DataLoader(batch_size, imgSize, maxTextLen, nEpoch=nEpoch)"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/anaconda3/envs/blitz/lib/python3.7/site-packages/tensorflow/python/keras/legacy_tf_layers/normalization.py:308: UserWarning: `tf.layers.batch_normalization` is deprecated and will be removed in a future version. Please use `tf.keras.layers.BatchNormalization` instead. In particular, `tf.control_dependencies(tf.GraphKeys.UPDATE_OPS)` should not be used (consult the `tf.keras.layers.BatchNormalization` documentation).\n",
" '`tf.layers.batch_normalization` is deprecated and '\n",
"/anaconda3/envs/blitz/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer_v1.py:1719: UserWarning: `layer.apply` is deprecated and will be removed in a future version. Please use `layer.__call__` method instead.\n",
" warnings.warn('`layer.apply` is deprecated and '\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:`tf.nn.rnn_cell.MultiRNNCell` is deprecated. This class is equivalent as `tf.keras.layers.StackedRNNCells`, and will be replaced by that in Tensorflow 2.0.\n",
"WARNING:tensorflow:From <ipython-input-53-b5e0a000c808>:76: bidirectional_dynamic_rnn (from tensorflow.python.ops.rnn) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Please use `keras.layers.Bidirectional(keras.layers.RNN(cell))`, which is equivalent to this API\n",
"WARNING:tensorflow:From /anaconda3/envs/blitz/lib/python3.7/site-packages/tensorflow/python/ops/rnn.py:447: dynamic_rnn (from tensorflow.python.ops.rnn) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Please use `keras.layers.RNN(cell)`, which is equivalent to this API\n",
"WARNING:tensorflow:From /anaconda3/envs/blitz/lib/python3.7/site-packages/tensorflow/python/keras/layers/legacy_rnn/rnn_cell_impl.py:981: calling Zeros.__init__ (from tensorflow.python.ops.init_ops) with dtype is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Call initializer instance with the dtype argument instead of passing it to the constructor\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/anaconda3/envs/blitz/lib/python3.7/site-packages/tensorflow/python/keras/layers/legacy_rnn/rnn_cell_impl.py:903: UserWarning: `tf.nn.rnn_cell.LSTMCell` is deprecated and will be removed in a future version. This class is equivalent as `tf.keras.layers.LSTMCell`, and will be replaced by that in Tensorflow 2.0.\n",
" warnings.warn(\"`tf.nn.rnn_cell.LSTMCell` is deprecated and will be \"\n",
"/anaconda3/envs/blitz/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer_v1.py:1727: UserWarning: `layer.add_variable` is deprecated and will be removed in a future version. Please use `layer.add_weight` method instead.\n",
" warnings.warn('`layer.add_variable` is deprecated and '\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Tensorflow: 2.4.0\n",
"Init with stored values from model/snapshot-3\n",
"INFO:tensorflow:Restoring parameters from model/snapshot-3\n",
"Epoch: 1\n",
"Train NN\n",
"Epoch: 1 Batch: 1/50 Loss: 0.11579028517007828\n",
"Epoch: 1 Batch: 2/50 Loss: 0.0868745744228363\n",
"Epoch: 1 Batch: 3/50 Loss: 0.13335715234279633\n",
"Epoch: 1 Batch: 4/50 Loss: 0.17490915954113007\n",
"Epoch: 1 Batch: 5/50 Loss: 0.14708039164543152\n",
"Epoch: 1 Batch: 6/50 Loss: 0.14854007959365845\n",
"Epoch: 1 Batch: 7/50 Loss: 0.0973290279507637\n",
"Epoch: 1 Batch: 8/50 Loss: 0.23460054397583008\n",
"Epoch: 1 Batch: 9/50 Loss: 0.138471320271492\n",
"Epoch: 1 Batch: 10/50 Loss: 0.13257314264774323\n",
"Epoch: 1 Batch: 11/50 Loss: 0.1029953882098198\n",
"Epoch: 1 Batch: 12/50 Loss: 0.15160636603832245\n",
"Epoch: 1 Batch: 13/50 Loss: 0.18332639336585999\n",
"Epoch: 1 Batch: 14/50 Loss: 0.2227000743150711\n",
"Epoch: 1 Batch: 15/50 Loss: 0.10308579355478287\n",
"Epoch: 1 Batch: 16/50 Loss: 0.10373742878437042\n",
"Epoch: 1 Batch: 17/50 Loss: 0.11266482621431351\n",
"Epoch: 1 Batch: 18/50 Loss: 0.11680487543344498\n",
"Epoch: 1 Batch: 19/50 Loss: 0.24134166538715363\n",
"Epoch: 1 Batch: 20/50 Loss: 0.12430744618177414\n",
"Epoch: 1 Batch: 21/50 Loss: 0.1312318593263626\n",
"Epoch: 1 Batch: 22/50 Loss: 0.1624596267938614\n",
"Epoch: 1 Batch: 23/50 Loss: 0.1432303935289383\n",
"Epoch: 1 Batch: 24/50 Loss: 0.21327371895313263\n",
"Epoch: 1 Batch: 25/50 Loss: 0.164026141166687\n",
"Epoch: 1 Batch: 26/50 Loss: 0.09636140614748001\n",
"Epoch: 1 Batch: 27/50 Loss: 0.128361776471138\n",
"Epoch: 1 Batch: 28/50 Loss: 0.10337819159030914\n",
"Epoch: 1 Batch: 29/50 Loss: 0.1733739972114563\n",
"Epoch: 1 Batch: 30/50 Loss: 0.11254748702049255\n",
"Epoch: 1 Batch: 31/50 Loss: 0.1759500354528427\n",
"Epoch: 1 Batch: 32/50 Loss: 0.11450458317995071\n",
"Epoch: 1 Batch: 33/50 Loss: 0.1410449743270874\n",
"Epoch: 1 Batch: 34/50 Loss: 0.13338056206703186\n",
"Epoch: 1 Batch: 35/50 Loss: 0.14250093698501587\n",
"Epoch: 1 Batch: 36/50 Loss: 0.15806788206100464\n",
"Epoch: 1 Batch: 37/50 Loss: 0.13288149237632751\n",
"Epoch: 1 Batch: 38/50 Loss: 0.14942428469657898\n",
"Epoch: 1 Batch: 39/50 Loss: 0.09776261448860168\n",
"Epoch: 1 Batch: 40/50 Loss: 0.09627821296453476\n",
"Epoch: 1 Batch: 41/50 Loss: 0.19292397797107697\n",
"Epoch: 1 Batch: 42/50 Loss: 0.1237221509218216\n",
"Epoch: 1 Batch: 43/50 Loss: 0.13541549444198608\n",
"Epoch: 1 Batch: 44/50 Loss: 0.15144950151443481\n",
"Epoch: 1 Batch: 45/50 Loss: 0.15170450508594513\n",
"Epoch: 1 Batch: 46/50 Loss: 0.15243643522262573\n",
"Epoch: 1 Batch: 47/50 Loss: 0.10972313582897186\n",
"Epoch: 1 Batch: 48/50 Loss: 0.09397879987955093\n",
"Epoch: 1 Batch: 49/50 Loss: 0.1336805373430252\n",
"Epoch: 1 Batch: 50/50 Loss: 0.09205459803342819\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 4.433996947449337%. Word accuracy: 77.6875%.\n",
"Character error rate improved, save model\n",
"Epoch: 2\n",
"Train NN\n",
"Epoch: 2 Batch: 1/50 Loss: 0.10117337107658386\n",
"Epoch: 2 Batch: 2/50 Loss: 0.11523067951202393\n",
"Epoch: 2 Batch: 3/50 Loss: 0.13114520907402039\n",
"Epoch: 2 Batch: 4/50 Loss: 0.12487310916185379\n",
"Epoch: 2 Batch: 5/50 Loss: 0.12923510372638702\n",
"Epoch: 2 Batch: 6/50 Loss: 0.13975705206394196\n",
"Epoch: 2 Batch: 7/50 Loss: 0.12472157180309296\n",
"Epoch: 2 Batch: 8/50 Loss: 0.13042248785495758\n",
"Epoch: 2 Batch: 9/50 Loss: 0.14074265956878662\n",
"Epoch: 2 Batch: 10/50 Loss: 0.08891132473945618\n",
"Epoch: 2 Batch: 11/50 Loss: 0.14652016758918762\n",
"Epoch: 2 Batch: 12/50 Loss: 0.10371917486190796\n",
"Epoch: 2 Batch: 13/50 Loss: 0.12820251286029816\n",
"Epoch: 2 Batch: 14/50 Loss: 0.064094178378582\n",
"Epoch: 2 Batch: 15/50 Loss: 0.13825152814388275\n",
"Epoch: 2 Batch: 16/50 Loss: 0.05951729789376259\n",
"Epoch: 2 Batch: 17/50 Loss: 0.07750429958105087\n",
"Epoch: 2 Batch: 18/50 Loss: 0.11327863484621048\n",
"Epoch: 2 Batch: 19/50 Loss: 0.08695909380912781\n",
"Epoch: 2 Batch: 20/50 Loss: 0.15584322810173035\n",
"Epoch: 2 Batch: 21/50 Loss: 0.16544730961322784\n",
"Epoch: 2 Batch: 22/50 Loss: 0.10321732610464096\n",
"Epoch: 2 Batch: 23/50 Loss: 0.16707158088684082\n",
"Epoch: 2 Batch: 24/50 Loss: 0.19464965164661407\n",
"Epoch: 2 Batch: 25/50 Loss: 0.10994695127010345\n",
"Epoch: 2 Batch: 26/50 Loss: 0.1698368936777115\n",
"Epoch: 2 Batch: 27/50 Loss: 0.15020553767681122\n",
"Epoch: 2 Batch: 28/50 Loss: 0.24588505923748016\n",
"Epoch: 2 Batch: 29/50 Loss: 0.20049743354320526\n",
"Epoch: 2 Batch: 30/50 Loss: 0.12356449663639069\n",
"Epoch: 2 Batch: 31/50 Loss: 0.41204965114593506\n",
"Epoch: 2 Batch: 32/50 Loss: 0.17869023978710175\n",
"Epoch: 2 Batch: 33/50 Loss: 0.2651899755001068\n",
"Epoch: 2 Batch: 34/50 Loss: 0.35347703099250793\n",
"Epoch: 2 Batch: 35/50 Loss: 0.4307447075843811\n",
"Epoch: 2 Batch: 36/50 Loss: 0.2976805865764618\n",
"Epoch: 2 Batch: 37/50 Loss: 0.21033556759357452\n",
"Epoch: 2 Batch: 38/50 Loss: 0.2872042953968048\n",
"Epoch: 2 Batch: 39/50 Loss: 0.27921125292778015\n",
"Epoch: 2 Batch: 40/50 Loss: 0.2543981671333313\n",
"Epoch: 2 Batch: 41/50 Loss: 0.30415448546409607\n",
"Epoch: 2 Batch: 42/50 Loss: 0.2561688721179962\n",
"Epoch: 2 Batch: 43/50 Loss: 0.23812417685985565\n",
"Epoch: 2 Batch: 44/50 Loss: 0.3327181935310364\n",
"Epoch: 2 Batch: 45/50 Loss: 0.20591312646865845\n",
"Epoch: 2 Batch: 46/50 Loss: 0.3000543713569641\n",
"Epoch: 2 Batch: 47/50 Loss: 0.2791275382041931\n",
"Epoch: 2 Batch: 48/50 Loss: 0.3513771891593933\n",
"Epoch: 2 Batch: 49/50 Loss: 0.30171358585357666\n",
"Epoch: 2 Batch: 50/50 Loss: 0.40190500020980835\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 5.362016911576297%. Word accuracy: 72.8125%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"Epoch: 3\n",
"Train NN\n",
"Epoch: 3 Batch: 1/50 Loss: 0.37847527861595154\n",
"Epoch: 3 Batch: 2/50 Loss: 0.31805282831192017\n",
"Epoch: 3 Batch: 3/50 Loss: 0.3585386276245117\n",
"Epoch: 3 Batch: 4/50 Loss: 0.4701528251171112\n",
"Epoch: 3 Batch: 5/50 Loss: 0.26547595858573914\n",
"Epoch: 3 Batch: 6/50 Loss: 0.27179184556007385\n",
"Epoch: 3 Batch: 7/50 Loss: 0.23842965066432953\n",
"Epoch: 3 Batch: 8/50 Loss: 0.29307472705841064\n",
"Epoch: 3 Batch: 9/50 Loss: 0.37150853872299194\n",
"Epoch: 3 Batch: 10/50 Loss: 0.2690795361995697\n",
"Epoch: 3 Batch: 11/50 Loss: 0.2281680852174759\n",
"Epoch: 3 Batch: 12/50 Loss: 0.2083224058151245\n",
"Epoch: 3 Batch: 13/50 Loss: 0.24119937419891357\n",
"Epoch: 3 Batch: 14/50 Loss: 0.25130924582481384\n",
"Epoch: 3 Batch: 15/50 Loss: 0.2430817037820816\n",
"Epoch: 3 Batch: 16/50 Loss: 0.2865249514579773\n",
"Epoch: 3 Batch: 17/50 Loss: 0.23210293054580688\n",
"Epoch: 3 Batch: 18/50 Loss: 0.25623878836631775\n",
"Epoch: 3 Batch: 19/50 Loss: 0.32218343019485474\n",
"Epoch: 3 Batch: 20/50 Loss: 0.21976643800735474\n",
"Epoch: 3 Batch: 21/50 Loss: 0.2729943096637726\n",
"Epoch: 3 Batch: 22/50 Loss: 0.24966883659362793\n",
"Epoch: 3 Batch: 23/50 Loss: 0.37363553047180176\n",
"Epoch: 3 Batch: 24/50 Loss: 0.2795848548412323\n",
"Epoch: 3 Batch: 25/50 Loss: 0.20301933586597443\n",
"Epoch: 3 Batch: 26/50 Loss: 0.2386201173067093\n",
"Epoch: 3 Batch: 27/50 Loss: 0.19283059239387512\n",
"Epoch: 3 Batch: 28/50 Loss: 0.2802884876728058\n",
"Epoch: 3 Batch: 29/50 Loss: 0.23907050490379333\n",
"Epoch: 3 Batch: 30/50 Loss: 0.25457414984703064\n",
"Epoch: 3 Batch: 31/50 Loss: 0.2701925039291382\n",
"Epoch: 3 Batch: 32/50 Loss: 0.2717282772064209\n",
"Epoch: 3 Batch: 33/50 Loss: 0.29905715584754944\n",
"Epoch: 3 Batch: 34/50 Loss: 0.3098875880241394\n",
"Epoch: 3 Batch: 35/50 Loss: 0.22648479044437408\n",
"Epoch: 3 Batch: 36/50 Loss: 0.23341436684131622\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch: 3 Batch: 37/50 Loss: 0.2607979476451874\n",
"Epoch: 3 Batch: 38/50 Loss: 0.3569034934043884\n",
"Epoch: 3 Batch: 39/50 Loss: 0.1945188343524933\n",
"Epoch: 3 Batch: 40/50 Loss: 0.22963258624076843\n",
"Epoch: 3 Batch: 41/50 Loss: 0.376620888710022\n",
"Epoch: 3 Batch: 42/50 Loss: 0.46203362941741943\n",
"Epoch: 3 Batch: 43/50 Loss: 0.26767054200172424\n",
"Epoch: 3 Batch: 44/50 Loss: 0.3570062816143036\n",
"Epoch: 3 Batch: 45/50 Loss: 0.3552154302597046\n",
"Epoch: 3 Batch: 46/50 Loss: 0.2683231830596924\n",
"Epoch: 3 Batch: 47/50 Loss: 0.2274375557899475\n",
"Epoch: 3 Batch: 48/50 Loss: 0.44943109154701233\n",
"Epoch: 3 Batch: 49/50 Loss: 0.44442692399024963\n",
"Epoch: 3 Batch: 50/50 Loss: 0.3135325610637665\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 5.204933100121433%. Word accuracy: 74.2875%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"Epoch: 4\n",
"Train NN\n",
"Epoch: 4 Batch: 1/50 Loss: 0.2760739028453827\n",
"Epoch: 4 Batch: 2/50 Loss: 0.2557814419269562\n",
"Epoch: 4 Batch: 3/50 Loss: 0.24654877185821533\n",
"Epoch: 4 Batch: 4/50 Loss: 0.26990312337875366\n",
"Epoch: 4 Batch: 5/50 Loss: 0.333682119846344\n",
"Epoch: 4 Batch: 6/50 Loss: 0.3109667897224426\n",
"Epoch: 4 Batch: 7/50 Loss: 0.44621652364730835\n",
"Epoch: 4 Batch: 8/50 Loss: 0.33693361282348633\n",
"Epoch: 4 Batch: 9/50 Loss: 0.2905413508415222\n",
"Epoch: 4 Batch: 10/50 Loss: 0.2760203182697296\n",
"Epoch: 4 Batch: 11/50 Loss: 0.2534785568714142\n",
"Epoch: 4 Batch: 12/50 Loss: 0.24782289564609528\n",
"Epoch: 4 Batch: 13/50 Loss: 0.26498714089393616\n",
"Epoch: 4 Batch: 14/50 Loss: 0.23175454139709473\n",
"Epoch: 4 Batch: 15/50 Loss: 0.3746224343776703\n",
"Epoch: 4 Batch: 16/50 Loss: 0.27582108974456787\n",
"Epoch: 4 Batch: 17/50 Loss: 0.31879034638404846\n",
"Epoch: 4 Batch: 18/50 Loss: 0.3024636507034302\n",
"Epoch: 4 Batch: 19/50 Loss: 0.4961569607257843\n",
"Epoch: 4 Batch: 20/50 Loss: 0.22289758920669556\n",
"Epoch: 4 Batch: 21/50 Loss: 0.5843725204467773\n",
"Epoch: 4 Batch: 22/50 Loss: 0.2595377564430237\n",
"Epoch: 4 Batch: 23/50 Loss: 0.29363927245140076\n",
"Epoch: 4 Batch: 24/50 Loss: 0.47457972168922424\n",
"Epoch: 4 Batch: 25/50 Loss: 0.46376460790634155\n",
"Epoch: 4 Batch: 26/50 Loss: 0.32904869318008423\n",
"Epoch: 4 Batch: 27/50 Loss: 0.3679184019565582\n",
"Epoch: 4 Batch: 28/50 Loss: 0.40635401010513306\n",
"Epoch: 4 Batch: 29/50 Loss: 0.41011494398117065\n",
"Epoch: 4 Batch: 30/50 Loss: 0.3032377064228058\n",
"Epoch: 4 Batch: 31/50 Loss: 0.3250954747200012\n",
"Epoch: 4 Batch: 32/50 Loss: 0.32201868295669556\n",
"Epoch: 4 Batch: 33/50 Loss: 0.2835899889469147\n",
"Epoch: 4 Batch: 34/50 Loss: 0.2841070592403412\n",
"Epoch: 4 Batch: 35/50 Loss: 0.2918672263622284\n",
"Epoch: 4 Batch: 36/50 Loss: 0.40070590376853943\n",
"Epoch: 4 Batch: 37/50 Loss: 0.3183540999889374\n",
"Epoch: 4 Batch: 38/50 Loss: 0.255553275346756\n",
"Epoch: 4 Batch: 39/50 Loss: 0.30765220522880554\n",
"Epoch: 4 Batch: 40/50 Loss: 0.42775484919548035\n",
"Epoch: 4 Batch: 41/50 Loss: 0.2968156337738037\n",
"Epoch: 4 Batch: 42/50 Loss: 0.2758021652698517\n",
"Epoch: 4 Batch: 43/50 Loss: 0.22496287524700165\n",
"Epoch: 4 Batch: 44/50 Loss: 0.3706851005554199\n",
"Epoch: 4 Batch: 45/50 Loss: 0.4308794438838959\n",
"Epoch: 4 Batch: 46/50 Loss: 0.37928685545921326\n",
"Epoch: 4 Batch: 47/50 Loss: 0.27114036679267883\n",
"Epoch: 4 Batch: 48/50 Loss: 0.3654005229473114\n",
"Epoch: 4 Batch: 49/50 Loss: 0.33603334426879883\n",
"Epoch: 4 Batch: 50/50 Loss: 0.31072089076042175\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 5.184879847595281%. Word accuracy: 73.7875%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"Epoch: 5\n",
"Train NN\n",
"Epoch: 5 Batch: 1/50 Loss: 0.29826849699020386\n",
"Epoch: 5 Batch: 2/50 Loss: 0.26956823468208313\n",
"Epoch: 5 Batch: 3/50 Loss: 0.19840899109840393\n",
"Epoch: 5 Batch: 4/50 Loss: 0.32367241382598877\n",
"Epoch: 5 Batch: 5/50 Loss: 0.2946043014526367\n",
"Epoch: 5 Batch: 6/50 Loss: 0.2733305096626282\n",
"Epoch: 5 Batch: 7/50 Loss: 0.3940696120262146\n",
"Epoch: 5 Batch: 8/50 Loss: 0.2067144364118576\n",
"Epoch: 5 Batch: 9/50 Loss: 0.3145182728767395\n",
"Epoch: 5 Batch: 10/50 Loss: 0.4383223354816437\n",
"Epoch: 5 Batch: 11/50 Loss: 0.2648324966430664\n",
"Epoch: 5 Batch: 12/50 Loss: 0.37137776613235474\n",
"Epoch: 5 Batch: 13/50 Loss: 0.4268592596054077\n",
"Epoch: 5 Batch: 14/50 Loss: 0.2883690297603607\n",
"Epoch: 5 Batch: 15/50 Loss: 0.3038330078125\n",
"Epoch: 5 Batch: 16/50 Loss: 0.2778050899505615\n",
"Epoch: 5 Batch: 17/50 Loss: 0.28172674775123596\n",
"Epoch: 5 Batch: 18/50 Loss: 0.31707262992858887\n",
"Epoch: 5 Batch: 19/50 Loss: 0.3550703227519989\n",
"Epoch: 5 Batch: 20/50 Loss: 0.3402249217033386\n",
"Epoch: 5 Batch: 21/50 Loss: 0.345009446144104\n",
"Epoch: 5 Batch: 22/50 Loss: 0.29490670561790466\n",
"Epoch: 5 Batch: 23/50 Loss: 0.26833006739616394\n",
"Epoch: 5 Batch: 24/50 Loss: 0.32224076986312866\n",
"Epoch: 5 Batch: 25/50 Loss: 0.2840728759765625\n",
"Epoch: 5 Batch: 26/50 Loss: 0.27940815687179565\n",
"Epoch: 5 Batch: 27/50 Loss: 0.29796236753463745\n",
"Epoch: 5 Batch: 28/50 Loss: 0.3198803961277008\n",
"Epoch: 5 Batch: 29/50 Loss: 0.21975398063659668\n",
"Epoch: 5 Batch: 30/50 Loss: 0.2979229986667633\n",
"Epoch: 5 Batch: 31/50 Loss: 0.36521732807159424\n",
"Epoch: 5 Batch: 32/50 Loss: 0.3834449350833893\n",
"Epoch: 5 Batch: 33/50 Loss: 0.33918696641921997\n",
"Epoch: 5 Batch: 34/50 Loss: 0.2884886860847473\n",
"Epoch: 5 Batch: 35/50 Loss: 0.4235113263130188\n",
"Epoch: 5 Batch: 36/50 Loss: 0.22893214225769043\n",
"Epoch: 5 Batch: 37/50 Loss: 0.25723695755004883\n",
"Epoch: 5 Batch: 38/50 Loss: 0.32611560821533203\n",
"Epoch: 5 Batch: 39/50 Loss: 0.28279003500938416\n",
"Epoch: 5 Batch: 40/50 Loss: 0.29601866006851196\n",
"Epoch: 5 Batch: 41/50 Loss: 0.3165765702724457\n",
"Epoch: 5 Batch: 42/50 Loss: 0.43654346466064453\n",
"Epoch: 5 Batch: 43/50 Loss: 0.32398855686187744\n",
"Epoch: 5 Batch: 44/50 Loss: 0.2106330543756485\n",
"Epoch: 5 Batch: 45/50 Loss: 0.29479506611824036\n",
"Epoch: 5 Batch: 46/50 Loss: 0.34618908166885376\n",
"Epoch: 5 Batch: 47/50 Loss: 0.29926133155822754\n",
"Epoch: 5 Batch: 48/50 Loss: 0.28906628489494324\n",
"Epoch: 5 Batch: 49/50 Loss: 0.32548603415489197\n",
"Epoch: 5 Batch: 50/50 Loss: 0.3841811418533325\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 5.555865019329107%. Word accuracy: 71.46249999999999%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"Epoch: 6\n",
"Train NN\n",
"Epoch: 6 Batch: 1/50 Loss: 0.25934118032455444\n",
"Epoch: 6 Batch: 2/50 Loss: 0.2735636830329895\n",
"Epoch: 6 Batch: 3/50 Loss: 0.2517126798629761\n",
"Epoch: 6 Batch: 4/50 Loss: 0.30514824390411377\n",
"Epoch: 6 Batch: 5/50 Loss: 0.3891216516494751\n",
"Epoch: 6 Batch: 6/50 Loss: 0.27850034832954407\n",
"Epoch: 6 Batch: 7/50 Loss: 0.2655998170375824\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch: 6 Batch: 8/50 Loss: 0.3948526084423065\n",
"Epoch: 6 Batch: 9/50 Loss: 0.3882589638233185\n",
"Epoch: 6 Batch: 10/50 Loss: 0.20321866869926453\n",
"Epoch: 6 Batch: 11/50 Loss: 0.2856283485889435\n",
"Epoch: 6 Batch: 12/50 Loss: 0.34669700264930725\n",
"Epoch: 6 Batch: 13/50 Loss: 0.2778487801551819\n",
"Epoch: 6 Batch: 14/50 Loss: 0.3115231692790985\n",
"Epoch: 6 Batch: 15/50 Loss: 0.21148058772087097\n",
"Epoch: 6 Batch: 16/50 Loss: 0.2574786841869354\n",
"Epoch: 6 Batch: 17/50 Loss: 0.2721075713634491\n",
"Epoch: 6 Batch: 18/50 Loss: 0.2129409909248352\n",
"Epoch: 6 Batch: 19/50 Loss: 0.2528429925441742\n",
"Epoch: 6 Batch: 20/50 Loss: 0.18482087552547455\n",
"Epoch: 6 Batch: 21/50 Loss: 0.20455528795719147\n",
"Epoch: 6 Batch: 22/50 Loss: 0.24193306267261505\n",
"Epoch: 6 Batch: 23/50 Loss: 0.17171688377857208\n",
"Epoch: 6 Batch: 24/50 Loss: 0.30990299582481384\n",
"Epoch: 6 Batch: 25/50 Loss: 0.19057589769363403\n",
"Epoch: 6 Batch: 26/50 Loss: 0.20242072641849518\n",
"Epoch: 6 Batch: 27/50 Loss: 0.23645611107349396\n",
"Epoch: 6 Batch: 28/50 Loss: 0.22515666484832764\n",
"Epoch: 6 Batch: 29/50 Loss: 0.29161328077316284\n",
"Epoch: 6 Batch: 30/50 Loss: 0.269281804561615\n",
"Epoch: 6 Batch: 31/50 Loss: 0.26118719577789307\n",
"Epoch: 6 Batch: 32/50 Loss: 0.26166999340057373\n",
"Epoch: 6 Batch: 33/50 Loss: 0.15892069041728973\n",
"Epoch: 6 Batch: 34/50 Loss: 0.2104623019695282\n",
"Epoch: 6 Batch: 35/50 Loss: 0.2435752898454666\n",
"Epoch: 6 Batch: 36/50 Loss: 0.23919548094272614\n",
"Epoch: 6 Batch: 37/50 Loss: 0.24366295337677002\n",
"Epoch: 6 Batch: 38/50 Loss: 0.3695705831050873\n",
"Epoch: 6 Batch: 39/50 Loss: 0.28474587202072144\n",
"Epoch: 6 Batch: 40/50 Loss: 0.2779007852077484\n",
"Epoch: 6 Batch: 41/50 Loss: 0.2610009014606476\n",
"Epoch: 6 Batch: 42/50 Loss: 0.24439339339733124\n",
"Epoch: 6 Batch: 43/50 Loss: 0.2964072823524475\n",
"Epoch: 6 Batch: 44/50 Loss: 0.3992901146411896\n",
"Epoch: 6 Batch: 45/50 Loss: 0.2332259714603424\n",
"Epoch: 6 Batch: 46/50 Loss: 0.38661444187164307\n",
"Epoch: 6 Batch: 47/50 Loss: 0.394309401512146\n",
"Epoch: 6 Batch: 48/50 Loss: 0.30134013295173645\n",
"Epoch: 6 Batch: 49/50 Loss: 0.38643524050712585\n",
"Epoch: 6 Batch: 50/50 Loss: 0.3722016215324402\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 5.2962868060739074%. Word accuracy: 72.91250000000001%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"Epoch: 7\n",
"Train NN\n",
"Epoch: 7 Batch: 1/50 Loss: 0.31110677123069763\n",
"Epoch: 7 Batch: 2/50 Loss: 0.22227995097637177\n",
"Epoch: 7 Batch: 3/50 Loss: 0.26431989669799805\n",
"Epoch: 7 Batch: 4/50 Loss: 0.29722341895103455\n",
"Epoch: 7 Batch: 5/50 Loss: 0.389100044965744\n",
"Epoch: 7 Batch: 6/50 Loss: 0.3633110523223877\n",
"Epoch: 7 Batch: 7/50 Loss: 0.23258334398269653\n",
"Epoch: 7 Batch: 8/50 Loss: 0.329585462808609\n",
"Epoch: 7 Batch: 9/50 Loss: 0.2960280478000641\n",
"Epoch: 7 Batch: 10/50 Loss: 0.32090967893600464\n",
"Epoch: 7 Batch: 11/50 Loss: 0.31354284286499023\n",
"Epoch: 7 Batch: 12/50 Loss: 0.30470559000968933\n",
"Epoch: 7 Batch: 13/50 Loss: 0.20322756469249725\n",
"Epoch: 7 Batch: 14/50 Loss: 0.33829477429389954\n",
"Epoch: 7 Batch: 15/50 Loss: 0.27919840812683105\n",
"Epoch: 7 Batch: 16/50 Loss: 0.25047120451927185\n",
"Epoch: 7 Batch: 17/50 Loss: 0.2276224046945572\n",
"Epoch: 7 Batch: 18/50 Loss: 0.2714168429374695\n",
"Epoch: 7 Batch: 19/50 Loss: 0.2914205491542816\n",
"Epoch: 7 Batch: 20/50 Loss: 0.27856194972991943\n",
"Epoch: 7 Batch: 21/50 Loss: 0.23439668118953705\n",
"Epoch: 7 Batch: 22/50 Loss: 0.19796441495418549\n",
"Epoch: 7 Batch: 23/50 Loss: 0.2048191875219345\n",
"Epoch: 7 Batch: 24/50 Loss: 0.23042450845241547\n",
"Epoch: 7 Batch: 25/50 Loss: 0.2624954879283905\n",
"Epoch: 7 Batch: 26/50 Loss: 0.2394779920578003\n",
"Epoch: 7 Batch: 27/50 Loss: 0.26169851422309875\n",
"Epoch: 7 Batch: 28/50 Loss: 0.20884224772453308\n",
"Epoch: 7 Batch: 29/50 Loss: 0.38720354437828064\n",
"Epoch: 7 Batch: 30/50 Loss: 0.3126840591430664\n",
"Epoch: 7 Batch: 31/50 Loss: 0.22326260805130005\n",
"Epoch: 7 Batch: 32/50 Loss: 0.23557190597057343\n",
"Epoch: 7 Batch: 33/50 Loss: 0.21229323744773865\n",
"Epoch: 7 Batch: 34/50 Loss: 0.18968765437602997\n",
"Epoch: 7 Batch: 35/50 Loss: 0.23011183738708496\n",
"Epoch: 7 Batch: 36/50 Loss: 0.2217978686094284\n",
"Epoch: 7 Batch: 37/50 Loss: 0.19310075044631958\n",
"Epoch: 7 Batch: 38/50 Loss: 0.2267788052558899\n",
"Epoch: 7 Batch: 39/50 Loss: 0.16711187362670898\n",
"Epoch: 7 Batch: 40/50 Loss: 0.16583088040351868\n",
"Epoch: 7 Batch: 41/50 Loss: 0.39061108231544495\n",
"Epoch: 7 Batch: 42/50 Loss: 0.14648263156414032\n",
"Epoch: 7 Batch: 43/50 Loss: 0.3033650517463684\n",
"Epoch: 7 Batch: 44/50 Loss: 0.28040415048599243\n",
"Epoch: 7 Batch: 45/50 Loss: 0.2642107605934143\n",
"Epoch: 7 Batch: 46/50 Loss: 0.2746178209781647\n",
"Epoch: 7 Batch: 47/50 Loss: 0.25618210434913635\n",
"Epoch: 7 Batch: 48/50 Loss: 0.26893720030784607\n",
"Epoch: 7 Batch: 49/50 Loss: 0.36225005984306335\n",
"Epoch: 7 Batch: 50/50 Loss: 0.24665695428848267\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 5.324138545693564%. Word accuracy: 72.95%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"Epoch: 8\n",
"Train NN\n",
"Epoch: 8 Batch: 1/50 Loss: 0.3317723274230957\n",
"Epoch: 8 Batch: 2/50 Loss: 0.19038259983062744\n",
"Epoch: 8 Batch: 3/50 Loss: 0.30752623081207275\n",
"Epoch: 8 Batch: 4/50 Loss: 0.24127143621444702\n",
"Epoch: 8 Batch: 5/50 Loss: 0.16286532580852509\n",
"Epoch: 8 Batch: 6/50 Loss: 0.23987413942813873\n",
"Epoch: 8 Batch: 7/50 Loss: 0.2115042805671692\n",
"Epoch: 8 Batch: 8/50 Loss: 0.20814044773578644\n",
"Epoch: 8 Batch: 9/50 Loss: 0.1848992109298706\n",
"Epoch: 8 Batch: 10/50 Loss: 0.14549203217029572\n",
"Epoch: 8 Batch: 11/50 Loss: 0.2328377515077591\n",
"Epoch: 8 Batch: 12/50 Loss: 0.2959938645362854\n",
"Epoch: 8 Batch: 13/50 Loss: 0.2072863131761551\n",
"Epoch: 8 Batch: 14/50 Loss: 0.3183950185775757\n",
"Epoch: 8 Batch: 15/50 Loss: 0.19327281415462494\n",
"Epoch: 8 Batch: 16/50 Loss: 0.24659526348114014\n",
"Epoch: 8 Batch: 17/50 Loss: 0.25256994366645813\n",
"Epoch: 8 Batch: 18/50 Loss: 0.209935262799263\n",
"Epoch: 8 Batch: 19/50 Loss: 0.23995432257652283\n",
"Epoch: 8 Batch: 20/50 Loss: 0.18765492737293243\n",
"Epoch: 8 Batch: 21/50 Loss: 0.21548637747764587\n",
"Epoch: 8 Batch: 22/50 Loss: 0.21185754239559174\n",
"Epoch: 8 Batch: 23/50 Loss: 0.1760212481021881\n",
"Epoch: 8 Batch: 24/50 Loss: 0.2765423655509949\n",
"Epoch: 8 Batch: 25/50 Loss: 0.20438140630722046\n",
"Epoch: 8 Batch: 26/50 Loss: 0.19844366610050201\n",
"Epoch: 8 Batch: 27/50 Loss: 0.1829649657011032\n",
"Epoch: 8 Batch: 28/50 Loss: 0.17864815890789032\n",
"Epoch: 8 Batch: 29/50 Loss: 0.1900290548801422\n",
"Epoch: 8 Batch: 30/50 Loss: 0.19955569505691528\n",
"Epoch: 8 Batch: 31/50 Loss: 0.21873103082180023\n",
"Epoch: 8 Batch: 32/50 Loss: 0.21576720476150513\n",
"Epoch: 8 Batch: 33/50 Loss: 0.22696135938167572\n",
"Epoch: 8 Batch: 34/50 Loss: 0.1642141193151474\n",
"Epoch: 8 Batch: 35/50 Loss: 0.18339107930660248\n",
"Epoch: 8 Batch: 36/50 Loss: 0.235735222697258\n",
"Epoch: 8 Batch: 37/50 Loss: 0.20080609619617462\n",
"Epoch: 8 Batch: 38/50 Loss: 0.2554597556591034\n",
"Epoch: 8 Batch: 39/50 Loss: 0.18105390667915344\n",
"Epoch: 8 Batch: 40/50 Loss: 0.19967219233512878\n",
"Epoch: 8 Batch: 41/50 Loss: 0.15628790855407715\n",
"Epoch: 8 Batch: 42/50 Loss: 0.24234452843666077\n",
"Epoch: 8 Batch: 43/50 Loss: 0.14999517798423767\n",
"Epoch: 8 Batch: 44/50 Loss: 0.15205906331539154\n",
"Epoch: 8 Batch: 45/50 Loss: 0.14888468384742737\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch: 8 Batch: 46/50 Loss: 0.14533592760562897\n",
"Epoch: 8 Batch: 47/50 Loss: 0.2568250298500061\n",
"Epoch: 8 Batch: 48/50 Loss: 0.1882786601781845\n",
"Epoch: 8 Batch: 49/50 Loss: 0.16074968874454498\n",
"Epoch: 8 Batch: 50/50 Loss: 0.17405062913894653\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 4.720312830739408%. Word accuracy: 76.2%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"Epoch: 9\n",
"Train NN\n",
"Epoch: 9 Batch: 1/50 Loss: 0.15458348393440247\n",
"Epoch: 9 Batch: 2/50 Loss: 0.13375452160835266\n",
"Epoch: 9 Batch: 3/50 Loss: 0.22415611147880554\n",
"Epoch: 9 Batch: 4/50 Loss: 0.16979937255382538\n",
"Epoch: 9 Batch: 5/50 Loss: 0.16221997141838074\n",
"Epoch: 9 Batch: 6/50 Loss: 0.17243336141109467\n",
"Epoch: 9 Batch: 7/50 Loss: 0.13954946398735046\n",
"Epoch: 9 Batch: 8/50 Loss: 0.17361673712730408\n",
"Epoch: 9 Batch: 9/50 Loss: 0.23260122537612915\n",
"Epoch: 9 Batch: 10/50 Loss: 0.17975473403930664\n",
"Epoch: 9 Batch: 11/50 Loss: 0.1637134850025177\n",
"Epoch: 9 Batch: 12/50 Loss: 0.17344807088375092\n",
"Epoch: 9 Batch: 13/50 Loss: 0.25261157751083374\n",
"Epoch: 9 Batch: 14/50 Loss: 0.2383480668067932\n",
"Epoch: 9 Batch: 15/50 Loss: 0.24540410935878754\n",
"Epoch: 9 Batch: 16/50 Loss: 0.16637827455997467\n",
"Epoch: 9 Batch: 17/50 Loss: 0.1960511952638626\n",
"Epoch: 9 Batch: 18/50 Loss: 0.18918606638908386\n",
"Epoch: 9 Batch: 19/50 Loss: 0.26057562232017517\n",
"Epoch: 9 Batch: 20/50 Loss: 0.37098151445388794\n",
"Epoch: 9 Batch: 21/50 Loss: 0.21826598048210144\n",
"Epoch: 9 Batch: 22/50 Loss: 0.3349151313304901\n",
"Epoch: 9 Batch: 23/50 Loss: 0.260900616645813\n",
"Epoch: 9 Batch: 24/50 Loss: 0.3175099194049835\n",
"Epoch: 9 Batch: 25/50 Loss: 0.3061996400356293\n",
"Epoch: 9 Batch: 26/50 Loss: 0.2735917866230011\n",
"Epoch: 9 Batch: 27/50 Loss: 0.19215838611125946\n",
"Epoch: 9 Batch: 28/50 Loss: 0.1749027669429779\n",
"Epoch: 9 Batch: 29/50 Loss: 0.43773001432418823\n",
"Epoch: 9 Batch: 30/50 Loss: 0.23160578310489655\n",
"Epoch: 9 Batch: 31/50 Loss: 0.2436215728521347\n",
"Epoch: 9 Batch: 32/50 Loss: 0.35368111729621887\n",
"Epoch: 9 Batch: 33/50 Loss: 0.26157623529434204\n",
"Epoch: 9 Batch: 34/50 Loss: 0.2137773483991623\n",
"Epoch: 9 Batch: 35/50 Loss: 0.30238425731658936\n",
"Epoch: 9 Batch: 36/50 Loss: 0.2697015702724457\n",
"Epoch: 9 Batch: 37/50 Loss: 0.22654223442077637\n",
"Epoch: 9 Batch: 38/50 Loss: 0.27139243483543396\n",
"Epoch: 9 Batch: 39/50 Loss: 0.3117079436779022\n",
"Epoch: 9 Batch: 40/50 Loss: 0.285111665725708\n",
"Epoch: 9 Batch: 41/50 Loss: 0.2564476728439331\n",
"Epoch: 9 Batch: 42/50 Loss: 0.2755676805973053\n",
"Epoch: 9 Batch: 43/50 Loss: 0.29364556074142456\n",
"Epoch: 9 Batch: 44/50 Loss: 0.2373111993074417\n",
"Epoch: 9 Batch: 45/50 Loss: 0.28823402523994446\n",
"Epoch: 9 Batch: 46/50 Loss: 0.38558322191238403\n",
"Epoch: 9 Batch: 47/50 Loss: 0.23358580470085144\n",
"Epoch: 9 Batch: 48/50 Loss: 0.30579495429992676\n",
"Epoch: 9 Batch: 49/50 Loss: 0.2973112463951111\n",
"Epoch: 9 Batch: 50/50 Loss: 0.3323134779930115\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 42.1073740265817%. Word accuracy: 1.8624999999999998%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"Epoch: 10\n",
"Train NN\n",
"Epoch: 10 Batch: 1/50 Loss: 0.2405553162097931\n",
"Epoch: 10 Batch: 2/50 Loss: 0.31272855401039124\n",
"Epoch: 10 Batch: 3/50 Loss: 0.4254525303840637\n",
"Epoch: 10 Batch: 4/50 Loss: 0.308671236038208\n",
"Epoch: 10 Batch: 5/50 Loss: 0.4529847502708435\n",
"Epoch: 10 Batch: 6/50 Loss: 0.3375054597854614\n",
"Epoch: 10 Batch: 7/50 Loss: 0.22764918208122253\n",
"Epoch: 10 Batch: 8/50 Loss: 0.28584739565849304\n",
"Epoch: 10 Batch: 9/50 Loss: 0.3864656984806061\n",
"Epoch: 10 Batch: 10/50 Loss: 0.2688930034637451\n",
"Epoch: 10 Batch: 11/50 Loss: 0.35482603311538696\n",
"Epoch: 10 Batch: 12/50 Loss: 0.36009126901626587\n",
"Epoch: 10 Batch: 13/50 Loss: 0.2844719886779785\n",
"Epoch: 10 Batch: 14/50 Loss: 0.3877105414867401\n",
"Epoch: 10 Batch: 15/50 Loss: 0.34967634081840515\n",
"Epoch: 10 Batch: 16/50 Loss: 0.358124315738678\n",
"Epoch: 10 Batch: 17/50 Loss: 0.20885518193244934\n",
"Epoch: 10 Batch: 18/50 Loss: 0.2460610568523407\n",
"Epoch: 10 Batch: 19/50 Loss: 0.3903960585594177\n",
"Epoch: 10 Batch: 20/50 Loss: 0.3590409755706787\n",
"Epoch: 10 Batch: 21/50 Loss: 0.3264564573764801\n",
"Epoch: 10 Batch: 22/50 Loss: 0.5116735100746155\n",
"Epoch: 10 Batch: 23/50 Loss: 0.23173636198043823\n",
"Epoch: 10 Batch: 24/50 Loss: 0.25731056928634644\n",
"Epoch: 10 Batch: 25/50 Loss: 0.416312575340271\n",
"Epoch: 10 Batch: 26/50 Loss: 0.33092382550239563\n",
"Epoch: 10 Batch: 27/50 Loss: 0.2629295289516449\n",
"Epoch: 10 Batch: 28/50 Loss: 0.2972758114337921\n",
"Epoch: 10 Batch: 29/50 Loss: 0.3823186457157135\n",
"Epoch: 10 Batch: 30/50 Loss: 0.32518377900123596\n",
"Epoch: 10 Batch: 31/50 Loss: 0.2797832787036896\n",
"Epoch: 10 Batch: 32/50 Loss: 0.22460900247097015\n",
"Epoch: 10 Batch: 33/50 Loss: 0.20064517855644226\n",
"Epoch: 10 Batch: 34/50 Loss: 0.35192105174064636\n",
"Epoch: 10 Batch: 35/50 Loss: 0.29487714171409607\n",
"Epoch: 10 Batch: 36/50 Loss: 0.27320927381515503\n",
"Epoch: 10 Batch: 37/50 Loss: 0.19010013341903687\n",
"Epoch: 10 Batch: 38/50 Loss: 0.24300545454025269\n",
"Epoch: 10 Batch: 39/50 Loss: 0.37789395451545715\n",
"Epoch: 10 Batch: 40/50 Loss: 0.21449045836925507\n",
"Epoch: 10 Batch: 41/50 Loss: 0.37589678168296814\n",
"Epoch: 10 Batch: 42/50 Loss: 0.28900229930877686\n",
"Epoch: 10 Batch: 43/50 Loss: 0.2140674889087677\n",
"Epoch: 10 Batch: 44/50 Loss: 0.3446773588657379\n",
"Epoch: 10 Batch: 45/50 Loss: 0.2741883397102356\n",
"Epoch: 10 Batch: 46/50 Loss: 0.21072326600551605\n",
"Epoch: 10 Batch: 47/50 Loss: 0.3905622661113739\n",
"Epoch: 10 Batch: 48/50 Loss: 0.342966765165329\n",
"Epoch: 10 Batch: 49/50 Loss: 0.35994186997413635\n",
"Epoch: 10 Batch: 50/50 Loss: 0.2715403735637665\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 5.2862601798108315%. Word accuracy: 73.45%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"Epoch: 11\n",
"Train NN\n",
"Epoch: 11 Batch: 1/50 Loss: 0.24077922105789185\n",
"Epoch: 11 Batch: 2/50 Loss: 0.2814844250679016\n",
"Epoch: 11 Batch: 3/50 Loss: 0.25843754410743713\n",
"Epoch: 11 Batch: 4/50 Loss: 0.21819168329238892\n",
"Epoch: 11 Batch: 5/50 Loss: 0.297860324382782\n",
"Epoch: 11 Batch: 6/50 Loss: 0.34788212180137634\n",
"Epoch: 11 Batch: 7/50 Loss: 0.2259323000907898\n",
"Epoch: 11 Batch: 8/50 Loss: 0.320919930934906\n",
"Epoch: 11 Batch: 9/50 Loss: 0.2943657338619232\n",
"Epoch: 11 Batch: 10/50 Loss: 0.23052459955215454\n",
"Epoch: 11 Batch: 11/50 Loss: 0.21922150254249573\n",
"Epoch: 11 Batch: 12/50 Loss: 0.2326476126909256\n",
"Epoch: 11 Batch: 13/50 Loss: 0.24602071940898895\n",
"Epoch: 11 Batch: 14/50 Loss: 0.30806317925453186\n",
"Epoch: 11 Batch: 15/50 Loss: 0.31298327445983887\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch: 11 Batch: 16/50 Loss: 0.25355762243270874\n",
"Epoch: 11 Batch: 17/50 Loss: 0.36586594581604004\n",
"Epoch: 11 Batch: 18/50 Loss: 0.31722402572631836\n",
"Epoch: 11 Batch: 19/50 Loss: 0.4524058997631073\n",
"Epoch: 11 Batch: 20/50 Loss: 0.2950882911682129\n",
"Epoch: 11 Batch: 21/50 Loss: 0.2787682116031647\n",
"Epoch: 11 Batch: 22/50 Loss: 0.3539491295814514\n",
"Epoch: 11 Batch: 23/50 Loss: 0.30058637261390686\n",
"Epoch: 11 Batch: 24/50 Loss: 0.32445934414863586\n",
"Epoch: 11 Batch: 25/50 Loss: 0.40457600355148315\n",
"Epoch: 11 Batch: 26/50 Loss: 0.2607375681400299\n",
"Epoch: 11 Batch: 27/50 Loss: 0.36476144194602966\n",
"Epoch: 11 Batch: 28/50 Loss: 0.394209086894989\n",
"Epoch: 11 Batch: 29/50 Loss: 0.32934072613716125\n",
"Epoch: 11 Batch: 30/50 Loss: 0.30627354979515076\n",
"Epoch: 11 Batch: 31/50 Loss: 0.35764119029045105\n",
"Epoch: 11 Batch: 32/50 Loss: 0.2397671788930893\n",
"Epoch: 11 Batch: 33/50 Loss: 0.330594003200531\n",
"Epoch: 11 Batch: 34/50 Loss: 0.3433588147163391\n",
"Epoch: 11 Batch: 35/50 Loss: 0.2824525237083435\n",
"Epoch: 11 Batch: 36/50 Loss: 0.308584064245224\n",
"Epoch: 11 Batch: 37/50 Loss: 0.34827280044555664\n",
"Epoch: 11 Batch: 38/50 Loss: 0.3178927004337311\n",
"Epoch: 11 Batch: 39/50 Loss: 0.25132718682289124\n",
"Epoch: 11 Batch: 40/50 Loss: 0.2908515930175781\n",
"Epoch: 11 Batch: 41/50 Loss: 0.30968788266181946\n",
"Epoch: 11 Batch: 42/50 Loss: 0.26973965764045715\n",
"Epoch: 11 Batch: 43/50 Loss: 0.25503990054130554\n",
"Epoch: 11 Batch: 44/50 Loss: 0.25615832209587097\n",
"Epoch: 11 Batch: 45/50 Loss: 0.2704838812351227\n",
"Epoch: 11 Batch: 46/50 Loss: 0.31890109181404114\n",
"Epoch: 11 Batch: 47/50 Loss: 0.2544901669025421\n",
"Epoch: 11 Batch: 48/50 Loss: 0.2480565905570984\n",
"Epoch: 11 Batch: 49/50 Loss: 0.4698520302772522\n",
"Epoch: 11 Batch: 50/50 Loss: 0.3426333963871002\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 5.388754581611168%. Word accuracy: 72.39999999999999%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"Epoch: 12\n",
"Train NN\n",
"Epoch: 12 Batch: 1/50 Loss: 0.1994258612394333\n",
"Epoch: 12 Batch: 2/50 Loss: 0.24001416563987732\n",
"Epoch: 12 Batch: 3/50 Loss: 0.20982661843299866\n",
"Epoch: 12 Batch: 4/50 Loss: 0.3199710547924042\n",
"Epoch: 12 Batch: 5/50 Loss: 0.3279452323913574\n",
"Epoch: 12 Batch: 6/50 Loss: 0.30738645792007446\n",
"Epoch: 12 Batch: 7/50 Loss: 0.40228354930877686\n",
"Epoch: 12 Batch: 8/50 Loss: 0.2528194189071655\n",
"Epoch: 12 Batch: 9/50 Loss: 0.2841728627681732\n",
"Epoch: 12 Batch: 10/50 Loss: 0.20384261012077332\n",
"Epoch: 12 Batch: 11/50 Loss: 0.2076055109500885\n",
"Epoch: 12 Batch: 12/50 Loss: 0.2764286696910858\n",
"Epoch: 12 Batch: 13/50 Loss: 0.20998945832252502\n",
"Epoch: 12 Batch: 14/50 Loss: 0.22579681873321533\n",
"Epoch: 12 Batch: 15/50 Loss: 0.254591703414917\n",
"Epoch: 12 Batch: 16/50 Loss: 0.24695679545402527\n",
"Epoch: 12 Batch: 17/50 Loss: 0.27850818634033203\n",
"Epoch: 12 Batch: 18/50 Loss: 0.27971190214157104\n",
"Epoch: 12 Batch: 19/50 Loss: 0.16171224415302277\n",
"Epoch: 12 Batch: 20/50 Loss: 0.17799656093120575\n",
"Epoch: 12 Batch: 21/50 Loss: 0.2454291135072708\n",
"Epoch: 12 Batch: 22/50 Loss: 0.3197686970233917\n",
"Epoch: 12 Batch: 23/50 Loss: 0.27224642038345337\n",
"Epoch: 12 Batch: 24/50 Loss: 0.26615625619888306\n",
"Epoch: 12 Batch: 25/50 Loss: 0.1659485101699829\n",
"Epoch: 12 Batch: 26/50 Loss: 0.3055580258369446\n",
"Epoch: 12 Batch: 27/50 Loss: 0.26526057720184326\n",
"Epoch: 12 Batch: 28/50 Loss: 0.23647017776966095\n",
"Epoch: 12 Batch: 29/50 Loss: 0.20619279146194458\n",
"Epoch: 12 Batch: 30/50 Loss: 0.2582274377346039\n",
"Epoch: 12 Batch: 31/50 Loss: 0.26580652594566345\n",
"Epoch: 12 Batch: 32/50 Loss: 0.24260792136192322\n",
"Epoch: 12 Batch: 33/50 Loss: 0.2958255708217621\n",
"Epoch: 12 Batch: 34/50 Loss: 0.2705859839916229\n",
"Epoch: 12 Batch: 35/50 Loss: 0.19418326020240784\n",
"Epoch: 12 Batch: 36/50 Loss: 0.2061665952205658\n",
"Epoch: 12 Batch: 37/50 Loss: 0.4105445444583893\n",
"Epoch: 12 Batch: 38/50 Loss: 0.25119924545288086\n",
"Epoch: 12 Batch: 39/50 Loss: 0.2267966866493225\n",
"Epoch: 12 Batch: 40/50 Loss: 0.20724652707576752\n",
"Epoch: 12 Batch: 41/50 Loss: 0.47250768542289734\n",
"Epoch: 12 Batch: 42/50 Loss: 0.2752871513366699\n",
"Epoch: 12 Batch: 43/50 Loss: 0.22894561290740967\n",
"Epoch: 12 Batch: 44/50 Loss: 0.2895902395248413\n",
"Epoch: 12 Batch: 45/50 Loss: 0.2594504952430725\n",
"Epoch: 12 Batch: 46/50 Loss: 0.2107611745595932\n",
"Epoch: 12 Batch: 47/50 Loss: 0.29586049914360046\n",
"Epoch: 12 Batch: 48/50 Loss: 0.2445235699415207\n",
"Epoch: 12 Batch: 49/50 Loss: 0.24358898401260376\n",
"Epoch: 12 Batch: 50/50 Loss: 0.24217242002487183\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 4.944240817281447%. Word accuracy: 74.4875%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"Epoch: 13\n",
"Train NN\n",
"Epoch: 13 Batch: 1/50 Loss: 0.27283975481987\n",
"Epoch: 13 Batch: 2/50 Loss: 0.19103612005710602\n",
"Epoch: 13 Batch: 3/50 Loss: 0.2729508578777313\n",
"Epoch: 13 Batch: 4/50 Loss: 0.19857388734817505\n",
"Epoch: 13 Batch: 5/50 Loss: 0.17859436571598053\n",
"Epoch: 13 Batch: 6/50 Loss: 0.3146194517612457\n",
"Epoch: 13 Batch: 7/50 Loss: 0.24670547246932983\n",
"Epoch: 13 Batch: 8/50 Loss: 0.2594357430934906\n",
"Epoch: 13 Batch: 9/50 Loss: 0.23323434591293335\n",
"Epoch: 13 Batch: 10/50 Loss: 0.2820914387702942\n",
"Epoch: 13 Batch: 11/50 Loss: 0.24967525899410248\n",
"Epoch: 13 Batch: 12/50 Loss: 0.2783384323120117\n",
"Epoch: 13 Batch: 13/50 Loss: 0.28770413994789124\n",
"Epoch: 13 Batch: 14/50 Loss: 0.2779575288295746\n",
"Epoch: 13 Batch: 15/50 Loss: 0.22218598425388336\n",
"Epoch: 13 Batch: 16/50 Loss: 0.2256261706352234\n",
"Epoch: 13 Batch: 17/50 Loss: 0.2363010197877884\n",
"Epoch: 13 Batch: 18/50 Loss: 0.274007648229599\n",
"Epoch: 13 Batch: 19/50 Loss: 0.2155025750398636\n",
"Epoch: 13 Batch: 20/50 Loss: 0.24511976540088654\n",
"Epoch: 13 Batch: 21/50 Loss: 0.3067079484462738\n",
"Epoch: 13 Batch: 22/50 Loss: 0.2580171525478363\n",
"Epoch: 13 Batch: 23/50 Loss: 0.258230060338974\n",
"Epoch: 13 Batch: 24/50 Loss: 0.25186488032341003\n",
"Epoch: 13 Batch: 25/50 Loss: 0.2709946036338806\n",
"Epoch: 13 Batch: 26/50 Loss: 0.295587956905365\n",
"Epoch: 13 Batch: 27/50 Loss: 0.27514174580574036\n",
"Epoch: 13 Batch: 28/50 Loss: 0.18607524037361145\n",
"Epoch: 13 Batch: 29/50 Loss: 0.20949788391590118\n",
"Epoch: 13 Batch: 30/50 Loss: 0.2762579917907715\n",
"Epoch: 13 Batch: 31/50 Loss: 0.2099863886833191\n",
"Epoch: 13 Batch: 32/50 Loss: 0.30494198203086853\n",
"Epoch: 13 Batch: 33/50 Loss: 0.2259085476398468\n",
"Epoch: 13 Batch: 34/50 Loss: 0.26630184054374695\n",
"Epoch: 13 Batch: 35/50 Loss: 0.2822740077972412\n",
"Epoch: 13 Batch: 36/50 Loss: 0.30318307876586914\n",
"Epoch: 13 Batch: 37/50 Loss: 0.307071715593338\n",
"Epoch: 13 Batch: 38/50 Loss: 0.2531990706920624\n",
"Epoch: 13 Batch: 39/50 Loss: 0.22928504645824432\n",
"Epoch: 13 Batch: 40/50 Loss: 0.29842084646224976\n",
"Epoch: 13 Batch: 41/50 Loss: 0.21838052570819855\n",
"Epoch: 13 Batch: 42/50 Loss: 0.250920832157135\n",
"Epoch: 13 Batch: 43/50 Loss: 0.30492377281188965\n",
"Epoch: 13 Batch: 44/50 Loss: 0.30438968539237976\n",
"Epoch: 13 Batch: 45/50 Loss: 0.3689911961555481\n",
"Epoch: 13 Batch: 46/50 Loss: 0.27362164855003357\n",
"Epoch: 13 Batch: 47/50 Loss: 0.2536216080188751\n",
"Epoch: 13 Batch: 48/50 Loss: 0.1863022893667221\n",
"Epoch: 13 Batch: 49/50 Loss: 0.248416930437088\n",
"Epoch: 13 Batch: 50/50 Loss: 0.18394964933395386\n",
"Validate NN\n",
"Batch: 1 / 16\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 5.478994217978855%. Word accuracy: 72.15%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"Epoch: 14\n",
"Train NN\n",
"Epoch: 14 Batch: 1/50 Loss: 0.28550779819488525\n",
"Epoch: 14 Batch: 2/50 Loss: 0.2787267863750458\n",
"Epoch: 14 Batch: 3/50 Loss: 0.21949568390846252\n",
"Epoch: 14 Batch: 4/50 Loss: 0.2163211852312088\n",
"Epoch: 14 Batch: 5/50 Loss: 0.2264135628938675\n",
"Epoch: 14 Batch: 6/50 Loss: 0.20514343678951263\n",
"Epoch: 14 Batch: 7/50 Loss: 0.20940493047237396\n",
"Epoch: 14 Batch: 8/50 Loss: 0.16949501633644104\n",
"Epoch: 14 Batch: 9/50 Loss: 0.18175597488880157\n",
"Epoch: 14 Batch: 10/50 Loss: 0.22507062554359436\n",
"Epoch: 14 Batch: 11/50 Loss: 0.2829805910587311\n",
"Epoch: 14 Batch: 12/50 Loss: 0.22972169518470764\n",
"Epoch: 14 Batch: 13/50 Loss: 0.1933216005563736\n",
"Epoch: 14 Batch: 14/50 Loss: 0.22507044672966003\n",
"Epoch: 14 Batch: 15/50 Loss: 0.28305870294570923\n",
"Epoch: 14 Batch: 16/50 Loss: 0.2747447192668915\n",
"Epoch: 14 Batch: 17/50 Loss: 0.1649346798658371\n",
"Epoch: 14 Batch: 18/50 Loss: 0.2788730561733246\n",
"Epoch: 14 Batch: 19/50 Loss: 0.5730648040771484\n",
"Epoch: 14 Batch: 20/50 Loss: 0.24634502828121185\n",
"Epoch: 14 Batch: 21/50 Loss: 0.2779015004634857\n",
"Epoch: 14 Batch: 22/50 Loss: 0.2775740921497345\n",
"Epoch: 14 Batch: 23/50 Loss: 0.22861911356449127\n",
"Epoch: 14 Batch: 24/50 Loss: 0.3119569718837738\n",
"Epoch: 14 Batch: 25/50 Loss: 0.29006052017211914\n",
"Epoch: 14 Batch: 26/50 Loss: 0.49193060398101807\n",
"Epoch: 14 Batch: 27/50 Loss: 0.41440117359161377\n",
"Epoch: 14 Batch: 28/50 Loss: 0.4233855903148651\n",
"Epoch: 14 Batch: 29/50 Loss: 0.38248005509376526\n",
"Epoch: 14 Batch: 30/50 Loss: 0.4895121157169342\n",
"Epoch: 14 Batch: 31/50 Loss: 0.3915610611438751\n",
"Epoch: 14 Batch: 32/50 Loss: 0.4108458161354065\n",
"Epoch: 14 Batch: 33/50 Loss: 0.3804076313972473\n",
"Epoch: 14 Batch: 34/50 Loss: 0.5085347294807434\n",
"Epoch: 14 Batch: 35/50 Loss: 0.39561522006988525\n",
"Epoch: 14 Batch: 36/50 Loss: 0.34715735912323\n",
"Epoch: 14 Batch: 37/50 Loss: 0.41644471883773804\n",
"Epoch: 14 Batch: 38/50 Loss: 0.341899573802948\n",
"Epoch: 14 Batch: 39/50 Loss: 0.35617324709892273\n",
"Epoch: 14 Batch: 40/50 Loss: 0.4454517662525177\n",
"Epoch: 14 Batch: 41/50 Loss: 0.266406774520874\n",
"Epoch: 14 Batch: 42/50 Loss: 0.2806122899055481\n",
"Epoch: 14 Batch: 43/50 Loss: 0.30145660042762756\n",
"Epoch: 14 Batch: 44/50 Loss: 0.26661232113838196\n",
"Epoch: 14 Batch: 45/50 Loss: 0.2940489947795868\n",
"Epoch: 14 Batch: 46/50 Loss: 0.47555139660835266\n",
"Epoch: 14 Batch: 47/50 Loss: 0.2821667194366455\n",
"Epoch: 14 Batch: 48/50 Loss: 0.2421911358833313\n",
"Epoch: 14 Batch: 49/50 Loss: 0.3670616149902344\n",
"Epoch: 14 Batch: 50/50 Loss: 0.3412722647190094\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 6.247702231481378%. Word accuracy: 66.7625%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"Epoch: 15\n",
"Train NN\n",
"Epoch: 15 Batch: 1/50 Loss: 0.2377638965845108\n",
"Epoch: 15 Batch: 2/50 Loss: 0.2704204022884369\n",
"Epoch: 15 Batch: 3/50 Loss: 0.38540118932724\n",
"Epoch: 15 Batch: 4/50 Loss: 0.2742641866207123\n",
"Epoch: 15 Batch: 5/50 Loss: 0.4178571403026581\n",
"Epoch: 15 Batch: 6/50 Loss: 0.29585063457489014\n",
"Epoch: 15 Batch: 7/50 Loss: 0.2461620718240738\n",
"Epoch: 15 Batch: 8/50 Loss: 0.6901635527610779\n",
"Epoch: 15 Batch: 9/50 Loss: 0.23296129703521729\n",
"Epoch: 15 Batch: 10/50 Loss: 0.7257495522499084\n",
"Epoch: 15 Batch: 11/50 Loss: 0.6670804619789124\n",
"Epoch: 15 Batch: 12/50 Loss: 0.41411206126213074\n",
"Epoch: 15 Batch: 13/50 Loss: 0.34983524680137634\n",
"Epoch: 15 Batch: 14/50 Loss: 0.35172200202941895\n",
"Epoch: 15 Batch: 15/50 Loss: 0.5302627086639404\n",
"Epoch: 15 Batch: 16/50 Loss: 0.7532660365104675\n",
"Epoch: 15 Batch: 17/50 Loss: 0.4075804054737091\n",
"Epoch: 15 Batch: 18/50 Loss: 0.564159095287323\n",
"Epoch: 15 Batch: 19/50 Loss: 0.6095283031463623\n",
"Epoch: 15 Batch: 20/50 Loss: 0.5535184741020203\n",
"Epoch: 15 Batch: 21/50 Loss: 0.41808220744132996\n",
"Epoch: 15 Batch: 22/50 Loss: 0.5010271668434143\n",
"Epoch: 15 Batch: 23/50 Loss: 0.4239647388458252\n",
"Epoch: 15 Batch: 24/50 Loss: 0.4398926794528961\n",
"Epoch: 15 Batch: 25/50 Loss: 0.39533036947250366\n",
"Epoch: 15 Batch: 26/50 Loss: 0.5475241541862488\n",
"Epoch: 15 Batch: 27/50 Loss: 0.37975218892097473\n",
"Epoch: 15 Batch: 28/50 Loss: 0.5579019784927368\n",
"Epoch: 15 Batch: 29/50 Loss: 0.5211500525474548\n",
"Epoch: 15 Batch: 30/50 Loss: 0.4510171711444855\n",
"Epoch: 15 Batch: 31/50 Loss: 0.46879294514656067\n",
"Epoch: 15 Batch: 32/50 Loss: 0.34150904417037964\n",
"Epoch: 15 Batch: 33/50 Loss: 0.5367166996002197\n",
"Epoch: 15 Batch: 34/50 Loss: 0.4306623935699463\n",
"Epoch: 15 Batch: 35/50 Loss: 0.4555385112762451\n",
"Epoch: 15 Batch: 36/50 Loss: 0.4903481602668762\n",
"Epoch: 15 Batch: 37/50 Loss: 0.48624634742736816\n",
"Epoch: 15 Batch: 38/50 Loss: 0.4466812014579773\n",
"Epoch: 15 Batch: 39/50 Loss: 0.5336242318153381\n",
"Epoch: 15 Batch: 40/50 Loss: 0.4397558271884918\n",
"Epoch: 15 Batch: 41/50 Loss: 0.4879392385482788\n",
"Epoch: 15 Batch: 42/50 Loss: 0.5301083326339722\n",
"Epoch: 15 Batch: 43/50 Loss: 0.4632718563079834\n",
"Epoch: 15 Batch: 44/50 Loss: 0.44043368101119995\n",
"Epoch: 15 Batch: 45/50 Loss: 0.42275694012641907\n",
"Epoch: 15 Batch: 46/50 Loss: 0.4964486062526703\n",
"Epoch: 15 Batch: 47/50 Loss: 0.5570999979972839\n",
"Epoch: 15 Batch: 48/50 Loss: 0.3832918107509613\n",
"Epoch: 15 Batch: 49/50 Loss: 0.4557211995124817\n",
"Epoch: 15 Batch: 50/50 Loss: 0.5757319927215576\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 5.151457760051692%. Word accuracy: 73.55000000000001%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"Epoch: 16\n",
"Train NN\n",
"Epoch: 16 Batch: 1/50 Loss: 0.3236285150051117\n",
"Epoch: 16 Batch: 2/50 Loss: 0.3972335755825043\n",
"Epoch: 16 Batch: 3/50 Loss: 0.508807361125946\n",
"Epoch: 16 Batch: 4/50 Loss: 0.5080168843269348\n",
"Epoch: 16 Batch: 5/50 Loss: 0.3933616578578949\n",
"Epoch: 16 Batch: 6/50 Loss: 0.46179652214050293\n",
"Epoch: 16 Batch: 7/50 Loss: 0.5172654986381531\n",
"Epoch: 16 Batch: 8/50 Loss: 0.5002099275588989\n",
"Epoch: 16 Batch: 9/50 Loss: 0.5011656880378723\n",
"Epoch: 16 Batch: 10/50 Loss: 0.487667441368103\n",
"Epoch: 16 Batch: 11/50 Loss: 0.4491559863090515\n",
"Epoch: 16 Batch: 12/50 Loss: 0.46724504232406616\n",
"Epoch: 16 Batch: 13/50 Loss: 0.43319687247276306\n",
"Epoch: 16 Batch: 14/50 Loss: 0.4126914143562317\n",
"Epoch: 16 Batch: 15/50 Loss: 0.5802550315856934\n",
"Epoch: 16 Batch: 16/50 Loss: 0.4025368392467499\n",
"Epoch: 16 Batch: 17/50 Loss: 0.4860393702983856\n",
"Epoch: 16 Batch: 18/50 Loss: 0.3748273253440857\n",
"Epoch: 16 Batch: 19/50 Loss: 0.4045239984989166\n",
"Epoch: 16 Batch: 20/50 Loss: 0.5277163982391357\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch: 16 Batch: 21/50 Loss: 0.4991509020328522\n",
"Epoch: 16 Batch: 22/50 Loss: 0.5712252855300903\n",
"Epoch: 16 Batch: 23/50 Loss: 0.35888412594795227\n",
"Epoch: 16 Batch: 24/50 Loss: 0.4760914742946625\n",
"Epoch: 16 Batch: 25/50 Loss: 0.8456259965896606\n",
"Epoch: 16 Batch: 26/50 Loss: 0.3729091286659241\n",
"Epoch: 16 Batch: 27/50 Loss: 0.4284523129463196\n",
"Epoch: 16 Batch: 28/50 Loss: 0.4477807581424713\n",
"Epoch: 16 Batch: 29/50 Loss: 0.5555457472801208\n",
"Epoch: 16 Batch: 30/50 Loss: 0.48125243186950684\n",
"Epoch: 16 Batch: 31/50 Loss: 0.4842211604118347\n",
"Epoch: 16 Batch: 32/50 Loss: 0.4407903254032135\n",
"Epoch: 16 Batch: 33/50 Loss: 0.48350343108177185\n",
"Epoch: 16 Batch: 34/50 Loss: 0.5657813549041748\n",
"Epoch: 16 Batch: 35/50 Loss: 0.5726830959320068\n",
"Epoch: 16 Batch: 36/50 Loss: 0.4539206922054291\n",
"Epoch: 16 Batch: 37/50 Loss: 0.5030955672264099\n",
"Epoch: 16 Batch: 38/50 Loss: 0.6084316968917847\n",
"Epoch: 16 Batch: 39/50 Loss: 0.4911748170852661\n",
"Epoch: 16 Batch: 40/50 Loss: 0.5081448554992676\n",
"Epoch: 16 Batch: 41/50 Loss: 0.3763558864593506\n",
"Epoch: 16 Batch: 42/50 Loss: 0.613945484161377\n",
"Epoch: 16 Batch: 43/50 Loss: 0.47285330295562744\n",
"Epoch: 16 Batch: 44/50 Loss: 0.4143272042274475\n",
"Epoch: 16 Batch: 45/50 Loss: 0.6904090642929077\n",
"Epoch: 16 Batch: 46/50 Loss: 0.41206884384155273\n",
"Epoch: 16 Batch: 47/50 Loss: 0.3025805354118347\n",
"Epoch: 16 Batch: 48/50 Loss: 0.5009528398513794\n",
"Epoch: 16 Batch: 49/50 Loss: 0.4727630317211151\n",
"Epoch: 16 Batch: 50/50 Loss: 0.510701596736908\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 15.40981049676363%. Word accuracy: 26.9125%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"Epoch: 17\n",
"Train NN\n",
"Epoch: 17 Batch: 1/50 Loss: 0.3418782651424408\n",
"Epoch: 17 Batch: 2/50 Loss: 0.48295682668685913\n",
"Epoch: 17 Batch: 3/50 Loss: 0.3397791385650635\n",
"Epoch: 17 Batch: 4/50 Loss: 0.543099582195282\n",
"Epoch: 17 Batch: 5/50 Loss: 0.42905884981155396\n",
"Epoch: 17 Batch: 6/50 Loss: 0.5066623091697693\n",
"Epoch: 17 Batch: 7/50 Loss: 0.3701668083667755\n",
"Epoch: 17 Batch: 8/50 Loss: 0.45219096541404724\n",
"Epoch: 17 Batch: 9/50 Loss: 0.3434106707572937\n",
"Epoch: 17 Batch: 10/50 Loss: 0.466286301612854\n",
"Epoch: 17 Batch: 11/50 Loss: 0.4372049570083618\n",
"Epoch: 17 Batch: 12/50 Loss: 0.36199432611465454\n",
"Epoch: 17 Batch: 13/50 Loss: 0.383320689201355\n",
"Epoch: 17 Batch: 14/50 Loss: 0.39827844500541687\n",
"Epoch: 17 Batch: 15/50 Loss: 0.27163729071617126\n",
"Epoch: 17 Batch: 16/50 Loss: 0.37058165669441223\n",
"Epoch: 17 Batch: 17/50 Loss: 0.32633131742477417\n",
"Epoch: 17 Batch: 18/50 Loss: 0.34547048807144165\n",
"Epoch: 17 Batch: 19/50 Loss: 0.3514903783798218\n",
"Epoch: 17 Batch: 20/50 Loss: 0.38481172919273376\n",
"Epoch: 17 Batch: 21/50 Loss: 0.33566588163375854\n",
"Epoch: 17 Batch: 22/50 Loss: 0.2736770808696747\n",
"Epoch: 17 Batch: 23/50 Loss: 0.43338102102279663\n",
"Epoch: 17 Batch: 24/50 Loss: 0.34895777702331543\n",
"Epoch: 17 Batch: 25/50 Loss: 0.3525674343109131\n",
"Epoch: 17 Batch: 26/50 Loss: 0.38210493326187134\n",
"Epoch: 17 Batch: 27/50 Loss: 0.31792181730270386\n",
"Epoch: 17 Batch: 28/50 Loss: 0.417338490486145\n",
"Epoch: 17 Batch: 29/50 Loss: 0.33750009536743164\n",
"Epoch: 17 Batch: 30/50 Loss: 0.4168227016925812\n",
"Epoch: 17 Batch: 31/50 Loss: 0.29779255390167236\n",
"Epoch: 17 Batch: 32/50 Loss: 0.2769959270954132\n",
"Epoch: 17 Batch: 33/50 Loss: 0.2624788284301758\n",
"Epoch: 17 Batch: 34/50 Loss: 0.3432704210281372\n",
"Epoch: 17 Batch: 35/50 Loss: 0.2669176161289215\n",
"Epoch: 17 Batch: 36/50 Loss: 0.1935691386461258\n",
"Epoch: 17 Batch: 37/50 Loss: 0.2482854127883911\n",
"Epoch: 17 Batch: 38/50 Loss: 0.2633110284805298\n",
"Epoch: 17 Batch: 39/50 Loss: 0.2934773862361908\n",
"Epoch: 17 Batch: 40/50 Loss: 0.2848869264125824\n",
"Epoch: 17 Batch: 41/50 Loss: 0.2827744781970978\n",
"Epoch: 17 Batch: 42/50 Loss: 0.2822949290275574\n",
"Epoch: 17 Batch: 43/50 Loss: 0.33530113101005554\n",
"Epoch: 17 Batch: 44/50 Loss: 0.1758122444152832\n",
"Epoch: 17 Batch: 45/50 Loss: 0.20802763104438782\n",
"Epoch: 17 Batch: 46/50 Loss: 0.1921202540397644\n",
"Epoch: 17 Batch: 47/50 Loss: 0.22450530529022217\n",
"Epoch: 17 Batch: 48/50 Loss: 0.2940964698791504\n",
"Epoch: 17 Batch: 49/50 Loss: 0.1947614997625351\n",
"Epoch: 17 Batch: 50/50 Loss: 0.21004274487495422\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 4.929757912679226%. Word accuracy: 74.5625%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"Epoch: 18\n",
"Train NN\n",
"Epoch: 18 Batch: 1/50 Loss: 0.18200454115867615\n",
"Epoch: 18 Batch: 2/50 Loss: 0.2923153340816498\n",
"Epoch: 18 Batch: 3/50 Loss: 0.2115183025598526\n",
"Epoch: 18 Batch: 4/50 Loss: 0.2393067330121994\n",
"Epoch: 18 Batch: 5/50 Loss: 0.31647902727127075\n",
"Epoch: 18 Batch: 6/50 Loss: 0.29006460309028625\n",
"Epoch: 18 Batch: 7/50 Loss: 0.20227529108524323\n",
"Epoch: 18 Batch: 8/50 Loss: 0.2913445830345154\n",
"Epoch: 18 Batch: 9/50 Loss: 0.2314857840538025\n",
"Epoch: 18 Batch: 10/50 Loss: 0.23206199705600739\n",
"Epoch: 18 Batch: 11/50 Loss: 0.3119303584098816\n",
"Epoch: 18 Batch: 12/50 Loss: 0.20269420742988586\n",
"Epoch: 18 Batch: 13/50 Loss: 0.32825008034706116\n",
"Epoch: 18 Batch: 14/50 Loss: 0.26874279975891113\n",
"Epoch: 18 Batch: 15/50 Loss: 0.30183109641075134\n",
"Epoch: 18 Batch: 16/50 Loss: 0.28206467628479004\n",
"Epoch: 18 Batch: 17/50 Loss: 0.2588060200214386\n",
"Epoch: 18 Batch: 18/50 Loss: 0.2631988525390625\n",
"Epoch: 18 Batch: 19/50 Loss: 0.19935736060142517\n",
"Epoch: 18 Batch: 20/50 Loss: 0.1466466784477234\n",
"Epoch: 18 Batch: 21/50 Loss: 0.2841337323188782\n",
"Epoch: 18 Batch: 22/50 Loss: 0.23912367224693298\n",
"Epoch: 18 Batch: 23/50 Loss: 0.3096224367618561\n",
"Epoch: 18 Batch: 24/50 Loss: 0.22533613443374634\n",
"Epoch: 18 Batch: 25/50 Loss: 0.20870059728622437\n",
"Epoch: 18 Batch: 26/50 Loss: 0.20261073112487793\n",
"Epoch: 18 Batch: 27/50 Loss: 0.14520566165447235\n",
"Epoch: 18 Batch: 28/50 Loss: 0.2809116244316101\n",
"Epoch: 18 Batch: 29/50 Loss: 0.2100089192390442\n",
"Epoch: 18 Batch: 30/50 Loss: 0.3723892867565155\n",
"Epoch: 18 Batch: 31/50 Loss: 0.3104584515094757\n",
"Epoch: 18 Batch: 32/50 Loss: 0.35511380434036255\n",
"Epoch: 18 Batch: 33/50 Loss: 0.2422257512807846\n",
"Epoch: 18 Batch: 34/50 Loss: 0.22305427491664886\n",
"Epoch: 18 Batch: 35/50 Loss: 0.3111613988876343\n",
"Epoch: 18 Batch: 36/50 Loss: 0.2781287729740143\n",
"Epoch: 18 Batch: 37/50 Loss: 0.2947453558444977\n",
"Epoch: 18 Batch: 38/50 Loss: 0.2880460023880005\n",
"Epoch: 18 Batch: 39/50 Loss: 0.28047943115234375\n",
"Epoch: 18 Batch: 40/50 Loss: 0.3574451804161072\n",
"Epoch: 18 Batch: 41/50 Loss: 0.3399255573749542\n",
"Epoch: 18 Batch: 42/50 Loss: 0.28984788060188293\n",
"Epoch: 18 Batch: 43/50 Loss: 0.3343707323074341\n",
"Epoch: 18 Batch: 44/50 Loss: 0.24616672098636627\n",
"Epoch: 18 Batch: 45/50 Loss: 0.20173096656799316\n",
"Epoch: 18 Batch: 46/50 Loss: 0.23324017226696014\n",
"Epoch: 18 Batch: 47/50 Loss: 0.27544382214546204\n",
"Epoch: 18 Batch: 48/50 Loss: 0.28572073578834534\n",
"Epoch: 18 Batch: 49/50 Loss: 0.26578646898269653\n",
"Epoch: 18 Batch: 50/50 Loss: 0.21629755198955536\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 4.933100121433585%. Word accuracy: 75.05%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"Epoch: 19\n",
"Train NN\n",
"Epoch: 19 Batch: 1/50 Loss: 0.19109253585338593\n",
"Epoch: 19 Batch: 2/50 Loss: 0.30138304829597473\n",
"Epoch: 19 Batch: 3/50 Loss: 0.18046395480632782\n",
"Epoch: 19 Batch: 4/50 Loss: 0.15682362020015717\n",
"Epoch: 19 Batch: 5/50 Loss: 0.27281415462493896\n",
"Epoch: 19 Batch: 6/50 Loss: 0.23384830355644226\n",
"Epoch: 19 Batch: 7/50 Loss: 0.2272077351808548\n",
"Epoch: 19 Batch: 8/50 Loss: 0.28848797082901\n",
"Epoch: 19 Batch: 9/50 Loss: 0.21224740147590637\n",
"Epoch: 19 Batch: 10/50 Loss: 0.2002609521150589\n",
"Epoch: 19 Batch: 11/50 Loss: 0.2584865689277649\n",
"Epoch: 19 Batch: 12/50 Loss: 0.33535289764404297\n",
"Epoch: 19 Batch: 13/50 Loss: 0.2521410584449768\n",
"Epoch: 19 Batch: 14/50 Loss: 0.405119389295578\n",
"Epoch: 19 Batch: 15/50 Loss: 0.3410692512989044\n",
"Epoch: 19 Batch: 16/50 Loss: 0.30363962054252625\n",
"Epoch: 19 Batch: 17/50 Loss: 0.3098481297492981\n",
"Epoch: 19 Batch: 18/50 Loss: 0.2233618199825287\n",
"Epoch: 19 Batch: 19/50 Loss: 0.29867881536483765\n",
"Epoch: 19 Batch: 20/50 Loss: 0.31095731258392334\n",
"Epoch: 19 Batch: 21/50 Loss: 0.20387226343154907\n",
"Epoch: 19 Batch: 22/50 Loss: 0.2922869324684143\n",
"Epoch: 19 Batch: 23/50 Loss: 0.22952382266521454\n",
"Epoch: 19 Batch: 24/50 Loss: 0.22751210629940033\n",
"Epoch: 19 Batch: 25/50 Loss: 0.3077145218849182\n",
"Epoch: 19 Batch: 26/50 Loss: 0.1681368201971054\n",
"Epoch: 19 Batch: 27/50 Loss: 0.19854331016540527\n",
"Epoch: 19 Batch: 28/50 Loss: 0.2452334612607956\n",
"Epoch: 19 Batch: 29/50 Loss: 0.41227301955223083\n",
"Epoch: 19 Batch: 30/50 Loss: 0.32823094725608826\n",
"Epoch: 19 Batch: 31/50 Loss: 0.21534141898155212\n",
"Epoch: 19 Batch: 32/50 Loss: 0.19911538064479828\n",
"Epoch: 19 Batch: 33/50 Loss: 0.30801621079444885\n",
"Epoch: 19 Batch: 34/50 Loss: 0.21774300932884216\n",
"Epoch: 19 Batch: 35/50 Loss: 0.1763625293970108\n",
"Epoch: 19 Batch: 36/50 Loss: 0.22744424641132355\n",
"Epoch: 19 Batch: 37/50 Loss: 0.22296489775180817\n",
"Epoch: 19 Batch: 38/50 Loss: 0.2818143665790558\n",
"Epoch: 19 Batch: 39/50 Loss: 0.27875423431396484\n",
"Epoch: 19 Batch: 40/50 Loss: 0.23363830149173737\n",
"Epoch: 19 Batch: 41/50 Loss: 0.32979726791381836\n",
"Epoch: 19 Batch: 42/50 Loss: 0.1953638792037964\n",
"Epoch: 19 Batch: 43/50 Loss: 0.2092418372631073\n",
"Epoch: 19 Batch: 44/50 Loss: 0.3828337490558624\n",
"Epoch: 19 Batch: 45/50 Loss: 0.13415662944316864\n",
"Epoch: 19 Batch: 46/50 Loss: 0.3465953469276428\n",
"Epoch: 19 Batch: 47/50 Loss: 0.17098551988601685\n",
"Epoch: 19 Batch: 48/50 Loss: 0.1725003719329834\n",
"Epoch: 19 Batch: 49/50 Loss: 0.3136105537414551\n",
"Epoch: 19 Batch: 50/50 Loss: 0.20636561512947083\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 4.456278339145063%. Word accuracy: 77.2625%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"Epoch: 20\n",
"Train NN\n",
"Epoch: 20 Batch: 1/50 Loss: 0.20477604866027832\n",
"Epoch: 20 Batch: 2/50 Loss: 0.27207350730895996\n",
"Epoch: 20 Batch: 3/50 Loss: 0.18678408861160278\n",
"Epoch: 20 Batch: 4/50 Loss: 0.239658385515213\n",
"Epoch: 20 Batch: 5/50 Loss: 0.21397772431373596\n",
"Epoch: 20 Batch: 6/50 Loss: 0.16129738092422485\n",
"Epoch: 20 Batch: 7/50 Loss: 0.2580011487007141\n",
"Epoch: 20 Batch: 8/50 Loss: 0.21159911155700684\n",
"Epoch: 20 Batch: 9/50 Loss: 0.1433742195367813\n",
"Epoch: 20 Batch: 10/50 Loss: 0.22318856418132782\n",
"Epoch: 20 Batch: 11/50 Loss: 0.19957292079925537\n",
"Epoch: 20 Batch: 12/50 Loss: 0.18849007785320282\n",
"Epoch: 20 Batch: 13/50 Loss: 0.17635971307754517\n",
"Epoch: 20 Batch: 14/50 Loss: 0.19370664656162262\n",
"Epoch: 20 Batch: 15/50 Loss: 0.24760845303535461\n",
"Epoch: 20 Batch: 16/50 Loss: 0.19369076192378998\n",
"Epoch: 20 Batch: 17/50 Loss: 0.25453710556030273\n",
"Epoch: 20 Batch: 18/50 Loss: 0.26673752069473267\n",
"Epoch: 20 Batch: 19/50 Loss: 0.25666290521621704\n",
"Epoch: 20 Batch: 20/50 Loss: 0.2504693865776062\n",
"Epoch: 20 Batch: 21/50 Loss: 0.22556942701339722\n",
"Epoch: 20 Batch: 22/50 Loss: 0.2180265486240387\n",
"Epoch: 20 Batch: 23/50 Loss: 0.3665105402469635\n",
"Epoch: 20 Batch: 24/50 Loss: 0.21233394742012024\n",
"Epoch: 20 Batch: 25/50 Loss: 0.30067434906959534\n",
"Epoch: 20 Batch: 26/50 Loss: 0.1938941478729248\n",
"Epoch: 20 Batch: 27/50 Loss: 0.1710345596075058\n",
"Epoch: 20 Batch: 28/50 Loss: 0.24500325322151184\n",
"Epoch: 20 Batch: 29/50 Loss: 0.25554752349853516\n",
"Epoch: 20 Batch: 30/50 Loss: 0.35788920521736145\n",
"Epoch: 20 Batch: 31/50 Loss: 0.16089092195034027\n",
"Epoch: 20 Batch: 32/50 Loss: 0.27017223834991455\n",
"Epoch: 20 Batch: 33/50 Loss: 0.3604779541492462\n",
"Epoch: 20 Batch: 34/50 Loss: 0.18934382498264313\n",
"Epoch: 20 Batch: 35/50 Loss: 0.22847995162010193\n",
"Epoch: 20 Batch: 36/50 Loss: 0.1995006799697876\n",
"Epoch: 20 Batch: 37/50 Loss: 0.16099469363689423\n",
"Epoch: 20 Batch: 38/50 Loss: 0.27005261182785034\n",
"Epoch: 20 Batch: 39/50 Loss: 0.22414495050907135\n",
"Epoch: 20 Batch: 40/50 Loss: 0.2139393389225006\n",
"Epoch: 20 Batch: 41/50 Loss: 0.20490078628063202\n",
"Epoch: 20 Batch: 42/50 Loss: 0.23103168606758118\n",
"Epoch: 20 Batch: 43/50 Loss: 0.24864518642425537\n",
"Epoch: 20 Batch: 44/50 Loss: 0.27086520195007324\n",
"Epoch: 20 Batch: 45/50 Loss: 0.15450720489025116\n",
"Epoch: 20 Batch: 46/50 Loss: 0.2896835207939148\n",
"Epoch: 20 Batch: 47/50 Loss: 0.17072413861751556\n",
"Epoch: 20 Batch: 48/50 Loss: 0.23178699612617493\n",
"Epoch: 20 Batch: 49/50 Loss: 0.20408421754837036\n",
"Epoch: 20 Batch: 50/50 Loss: 0.18713104724884033\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 4.618932498523858%. Word accuracy: 76.14999999999999%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"Epoch: 21\n",
"Train NN\n",
"Epoch: 21 Batch: 1/50 Loss: 0.132852703332901\n",
"Epoch: 21 Batch: 2/50 Loss: 0.14357474446296692\n",
"Epoch: 21 Batch: 3/50 Loss: 0.13361041247844696\n",
"Epoch: 21 Batch: 4/50 Loss: 0.15566639602184296\n",
"Epoch: 21 Batch: 5/50 Loss: 0.1858004480600357\n",
"Epoch: 21 Batch: 6/50 Loss: 0.21773318946361542\n",
"Epoch: 21 Batch: 7/50 Loss: 0.21902936697006226\n",
"Epoch: 21 Batch: 8/50 Loss: 0.2525743544101715\n",
"Epoch: 21 Batch: 9/50 Loss: 0.18620368838310242\n",
"Epoch: 21 Batch: 10/50 Loss: 0.18319688737392426\n",
"Epoch: 21 Batch: 11/50 Loss: 0.23197734355926514\n",
"Epoch: 21 Batch: 12/50 Loss: 0.1802426427602768\n",
"Epoch: 21 Batch: 13/50 Loss: 0.1679973602294922\n",
"Epoch: 21 Batch: 14/50 Loss: 0.1590358316898346\n",
"Epoch: 21 Batch: 15/50 Loss: 0.13629047572612762\n",
"Epoch: 21 Batch: 16/50 Loss: 0.30392810702323914\n",
"Epoch: 21 Batch: 17/50 Loss: 0.18402275443077087\n",
"Epoch: 21 Batch: 18/50 Loss: 0.12152761965990067\n",
"Epoch: 21 Batch: 19/50 Loss: 0.11604472249746323\n",
"Epoch: 21 Batch: 20/50 Loss: 0.13135313987731934\n",
"Epoch: 21 Batch: 21/50 Loss: 0.16245704889297485\n",
"Epoch: 21 Batch: 22/50 Loss: 0.11137571930885315\n",
"Epoch: 21 Batch: 23/50 Loss: 0.1275842934846878\n",
"Epoch: 21 Batch: 24/50 Loss: 0.14651112258434296\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch: 21 Batch: 25/50 Loss: 0.15669958293437958\n",
"Epoch: 21 Batch: 26/50 Loss: 0.1481507271528244\n",
"Epoch: 21 Batch: 27/50 Loss: 0.14924177527427673\n",
"Epoch: 21 Batch: 28/50 Loss: 0.1756376475095749\n",
"Epoch: 21 Batch: 29/50 Loss: 0.26526907086372375\n",
"Epoch: 21 Batch: 30/50 Loss: 0.10717087984085083\n",
"Epoch: 21 Batch: 31/50 Loss: 0.14224959909915924\n",
"Epoch: 21 Batch: 32/50 Loss: 0.24987785518169403\n",
"Epoch: 21 Batch: 33/50 Loss: 0.24034184217453003\n",
"Epoch: 21 Batch: 34/50 Loss: 0.4233112633228302\n",
"Epoch: 21 Batch: 35/50 Loss: 0.17955327033996582\n",
"Epoch: 21 Batch: 36/50 Loss: 0.13854321837425232\n",
"Epoch: 21 Batch: 37/50 Loss: 0.13083060085773468\n",
"Epoch: 21 Batch: 38/50 Loss: 0.11298935860395432\n",
"Epoch: 21 Batch: 39/50 Loss: 0.19894906878471375\n",
"Epoch: 21 Batch: 40/50 Loss: 0.274223268032074\n",
"Epoch: 21 Batch: 41/50 Loss: 0.2121247500181198\n",
"Epoch: 21 Batch: 42/50 Loss: 0.22041647136211395\n",
"Epoch: 21 Batch: 43/50 Loss: 0.19952057301998138\n",
"Epoch: 21 Batch: 44/50 Loss: 0.19449478387832642\n",
"Epoch: 21 Batch: 45/50 Loss: 0.18096709251403809\n",
"Epoch: 21 Batch: 46/50 Loss: 0.1657758355140686\n",
"Epoch: 21 Batch: 47/50 Loss: 0.12200365215539932\n",
"Epoch: 21 Batch: 48/50 Loss: 0.16407863795757294\n",
"Epoch: 21 Batch: 49/50 Loss: 0.2245144098997116\n",
"Epoch: 21 Batch: 50/50 Loss: 0.12581083178520203\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 4.878510711779057%. Word accuracy: 74.95%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"Epoch: 22\n",
"Train NN\n",
"Epoch: 22 Batch: 1/50 Loss: 0.16972622275352478\n",
"Epoch: 22 Batch: 2/50 Loss: 0.27923426032066345\n",
"Epoch: 22 Batch: 3/50 Loss: 0.17151996493339539\n",
"Epoch: 22 Batch: 4/50 Loss: 0.21309061348438263\n",
"Epoch: 22 Batch: 5/50 Loss: 0.15540793538093567\n",
"Epoch: 22 Batch: 6/50 Loss: 0.14361971616744995\n",
"Epoch: 22 Batch: 7/50 Loss: 0.2340191751718521\n",
"Epoch: 22 Batch: 8/50 Loss: 0.20373575389385223\n",
"Epoch: 22 Batch: 9/50 Loss: 0.1753719300031662\n",
"Epoch: 22 Batch: 10/50 Loss: 0.1500532031059265\n",
"Epoch: 22 Batch: 11/50 Loss: 0.26949793100357056\n",
"Epoch: 22 Batch: 12/50 Loss: 0.17647844552993774\n",
"Epoch: 22 Batch: 13/50 Loss: 0.2748395502567291\n",
"Epoch: 22 Batch: 14/50 Loss: 0.18158115446567535\n",
"Epoch: 22 Batch: 15/50 Loss: 0.330680251121521\n",
"Epoch: 22 Batch: 16/50 Loss: 0.18852731585502625\n",
"Epoch: 22 Batch: 17/50 Loss: 0.20983023941516876\n",
"Epoch: 22 Batch: 18/50 Loss: 0.2651125192642212\n",
"Epoch: 22 Batch: 19/50 Loss: 0.18317756056785583\n",
"Epoch: 22 Batch: 20/50 Loss: 0.1545751839876175\n",
"Epoch: 22 Batch: 21/50 Loss: 0.1937844157218933\n",
"Epoch: 22 Batch: 22/50 Loss: 0.18623074889183044\n",
"Epoch: 22 Batch: 23/50 Loss: 0.19485464692115784\n",
"Epoch: 22 Batch: 24/50 Loss: 0.1734895557165146\n",
"Epoch: 22 Batch: 25/50 Loss: 0.1417628526687622\n",
"Epoch: 22 Batch: 26/50 Loss: 0.2187958061695099\n",
"Epoch: 22 Batch: 27/50 Loss: 0.23768803477287292\n",
"Epoch: 22 Batch: 28/50 Loss: 0.1994040608406067\n",
"Epoch: 22 Batch: 29/50 Loss: 0.4675081670284271\n",
"Epoch: 22 Batch: 30/50 Loss: 0.2077164500951767\n",
"Epoch: 22 Batch: 31/50 Loss: 0.25930559635162354\n",
"Epoch: 22 Batch: 32/50 Loss: 0.18371696770191193\n",
"Epoch: 22 Batch: 33/50 Loss: 0.16590112447738647\n",
"Epoch: 22 Batch: 34/50 Loss: 0.21249672770500183\n",
"Epoch: 22 Batch: 35/50 Loss: 0.16884787380695343\n",
"Epoch: 22 Batch: 36/50 Loss: 0.17027349770069122\n",
"Epoch: 22 Batch: 37/50 Loss: 0.12782840430736542\n",
"Epoch: 22 Batch: 38/50 Loss: 0.1956111192703247\n",
"Epoch: 22 Batch: 39/50 Loss: 0.22461943328380585\n",
"Epoch: 22 Batch: 40/50 Loss: 0.22096401453018188\n",
"Epoch: 22 Batch: 41/50 Loss: 0.1778503805398941\n",
"Epoch: 22 Batch: 42/50 Loss: 0.14420515298843384\n",
"Epoch: 22 Batch: 43/50 Loss: 0.13974183797836304\n",
"Epoch: 22 Batch: 44/50 Loss: 0.18510949611663818\n",
"Epoch: 22 Batch: 45/50 Loss: 0.19979770481586456\n",
"Epoch: 22 Batch: 46/50 Loss: 0.1764189451932907\n",
"Epoch: 22 Batch: 47/50 Loss: 0.26477596163749695\n",
"Epoch: 22 Batch: 48/50 Loss: 0.22048696875572205\n",
"Epoch: 22 Batch: 49/50 Loss: 0.1779939830303192\n",
"Epoch: 22 Batch: 50/50 Loss: 0.1997036337852478\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 4.607791802675995%. Word accuracy: 76.55%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"Epoch: 23\n",
"Train NN\n",
"Epoch: 23 Batch: 1/50 Loss: 0.2411380410194397\n",
"Epoch: 23 Batch: 2/50 Loss: 0.1937919706106186\n",
"Epoch: 23 Batch: 3/50 Loss: 0.1499529927968979\n",
"Epoch: 23 Batch: 4/50 Loss: 0.14353962242603302\n",
"Epoch: 23 Batch: 5/50 Loss: 0.26577016711235046\n",
"Epoch: 23 Batch: 6/50 Loss: 0.17213621735572815\n",
"Epoch: 23 Batch: 7/50 Loss: 0.15328870713710785\n",
"Epoch: 23 Batch: 8/50 Loss: 0.19454020261764526\n",
"Epoch: 23 Batch: 9/50 Loss: 0.1712389588356018\n",
"Epoch: 23 Batch: 10/50 Loss: 0.15787287056446075\n",
"Epoch: 23 Batch: 11/50 Loss: 0.19935747981071472\n",
"Epoch: 23 Batch: 12/50 Loss: 0.20745541155338287\n",
"Epoch: 23 Batch: 13/50 Loss: 0.13571126759052277\n",
"Epoch: 23 Batch: 14/50 Loss: 0.1427735537290573\n",
"Epoch: 23 Batch: 15/50 Loss: 0.25372716784477234\n",
"Epoch: 23 Batch: 16/50 Loss: 0.14908309280872345\n",
"Epoch: 23 Batch: 17/50 Loss: 0.1663253903388977\n",
"Epoch: 23 Batch: 18/50 Loss: 0.1510983556509018\n",
"Epoch: 23 Batch: 19/50 Loss: 0.11774050444364548\n",
"Epoch: 23 Batch: 20/50 Loss: 0.21585072576999664\n",
"Epoch: 23 Batch: 21/50 Loss: 0.1106511577963829\n",
"Epoch: 23 Batch: 22/50 Loss: 0.19111621379852295\n",
"Epoch: 23 Batch: 23/50 Loss: 0.23575849831104279\n",
"Epoch: 23 Batch: 24/50 Loss: 0.39593929052352905\n",
"Epoch: 23 Batch: 25/50 Loss: 0.15544867515563965\n",
"Epoch: 23 Batch: 26/50 Loss: 0.15697646141052246\n",
"Epoch: 23 Batch: 27/50 Loss: 0.17452946305274963\n",
"Epoch: 23 Batch: 28/50 Loss: 0.23906660079956055\n",
"Epoch: 23 Batch: 29/50 Loss: 0.15657632052898407\n",
"Epoch: 23 Batch: 30/50 Loss: 0.22006554901599884\n",
"Epoch: 23 Batch: 31/50 Loss: 0.24795444309711456\n",
"Epoch: 23 Batch: 32/50 Loss: 0.21723252534866333\n",
"Epoch: 23 Batch: 33/50 Loss: 0.18145737051963806\n",
"Epoch: 23 Batch: 34/50 Loss: 0.25029489398002625\n",
"Epoch: 23 Batch: 35/50 Loss: 0.1769476979970932\n",
"Epoch: 23 Batch: 36/50 Loss: 0.1733773648738861\n",
"Epoch: 23 Batch: 37/50 Loss: 0.2394707053899765\n",
"Epoch: 23 Batch: 38/50 Loss: 0.18475842475891113\n",
"Epoch: 23 Batch: 39/50 Loss: 0.1926574409008026\n",
"Epoch: 23 Batch: 40/50 Loss: 0.17464926838874817\n",
"Epoch: 23 Batch: 41/50 Loss: 0.22260326147079468\n",
"Epoch: 23 Batch: 42/50 Loss: 0.1651650220155716\n",
"Epoch: 23 Batch: 43/50 Loss: 0.204610675573349\n",
"Epoch: 23 Batch: 44/50 Loss: 0.19217510521411896\n",
"Epoch: 23 Batch: 45/50 Loss: 0.2418399155139923\n",
"Epoch: 23 Batch: 46/50 Loss: 0.2013596147298813\n",
"Epoch: 23 Batch: 47/50 Loss: 0.2962210178375244\n",
"Epoch: 23 Batch: 48/50 Loss: 0.26823118329048157\n",
"Epoch: 23 Batch: 49/50 Loss: 0.20293951034545898\n",
"Epoch: 23 Batch: 50/50 Loss: 0.3218253552913666\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 4.759305266206927%. Word accuracy: 74.775%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"Epoch: 24\n",
"Train NN\n",
"Epoch: 24 Batch: 1/50 Loss: 0.14878390729427338\n",
"Epoch: 24 Batch: 2/50 Loss: 0.16542376577854156\n",
"Epoch: 24 Batch: 3/50 Loss: 0.14585505425930023\n",
"Epoch: 24 Batch: 4/50 Loss: 0.19265449047088623\n",
"Epoch: 24 Batch: 5/50 Loss: 0.19932937622070312\n",
"Epoch: 24 Batch: 6/50 Loss: 0.19666722416877747\n",
"Epoch: 24 Batch: 7/50 Loss: 0.16996020078659058\n",
"Epoch: 24 Batch: 8/50 Loss: 0.26955336332321167\n",
"Epoch: 24 Batch: 9/50 Loss: 0.20770619809627533\n",
"Epoch: 24 Batch: 10/50 Loss: 0.2532878518104553\n",
"Epoch: 24 Batch: 11/50 Loss: 0.16501997411251068\n",
"Epoch: 24 Batch: 12/50 Loss: 0.2042030692100525\n",
"Epoch: 24 Batch: 13/50 Loss: 0.20303753018379211\n",
"Epoch: 24 Batch: 14/50 Loss: 0.30564066767692566\n",
"Epoch: 24 Batch: 15/50 Loss: 0.18215882778167725\n",
"Epoch: 24 Batch: 16/50 Loss: 0.28528299927711487\n",
"Epoch: 24 Batch: 17/50 Loss: 0.13320758938789368\n",
"Epoch: 24 Batch: 18/50 Loss: 0.19044196605682373\n",
"Epoch: 24 Batch: 19/50 Loss: 0.20638500154018402\n",
"Epoch: 24 Batch: 20/50 Loss: 0.2904544770717621\n",
"Epoch: 24 Batch: 21/50 Loss: 0.22632195055484772\n",
"Epoch: 24 Batch: 22/50 Loss: 0.21243079006671906\n",
"Epoch: 24 Batch: 23/50 Loss: 0.21568842232227325\n",
"Epoch: 24 Batch: 24/50 Loss: 0.2739044725894928\n",
"Epoch: 24 Batch: 25/50 Loss: 0.24534252285957336\n",
"Epoch: 24 Batch: 26/50 Loss: 0.16697341203689575\n",
"Epoch: 24 Batch: 27/50 Loss: 0.24481379985809326\n",
"Epoch: 24 Batch: 28/50 Loss: 0.248722106218338\n",
"Epoch: 24 Batch: 29/50 Loss: 0.18712513148784637\n",
"Epoch: 24 Batch: 30/50 Loss: 0.23313067853450775\n",
"Epoch: 24 Batch: 31/50 Loss: 0.2663334906101227\n",
"Epoch: 24 Batch: 32/50 Loss: 0.21770420670509338\n",
"Epoch: 24 Batch: 33/50 Loss: 0.179997518658638\n",
"Epoch: 24 Batch: 34/50 Loss: 0.19731773436069489\n",
"Epoch: 24 Batch: 35/50 Loss: 0.2943321466445923\n",
"Epoch: 24 Batch: 36/50 Loss: 0.20506469905376434\n",
"Epoch: 24 Batch: 37/50 Loss: 0.1919456273317337\n",
"Epoch: 24 Batch: 38/50 Loss: 0.14367957413196564\n",
"Epoch: 24 Batch: 39/50 Loss: 0.16058214008808136\n",
"Epoch: 24 Batch: 40/50 Loss: 0.32308316230773926\n",
"Epoch: 24 Batch: 41/50 Loss: 0.19770431518554688\n",
"Epoch: 24 Batch: 42/50 Loss: 0.19002017378807068\n",
"Epoch: 24 Batch: 43/50 Loss: 0.29165053367614746\n",
"Epoch: 24 Batch: 44/50 Loss: 0.2155028134584427\n",
"Epoch: 24 Batch: 45/50 Loss: 0.1536273956298828\n",
"Epoch: 24 Batch: 46/50 Loss: 0.2375653237104416\n",
"Epoch: 24 Batch: 47/50 Loss: 0.16051612794399261\n",
"Epoch: 24 Batch: 48/50 Loss: 0.18305401504039764\n",
"Epoch: 24 Batch: 49/50 Loss: 0.16854120790958405\n",
"Epoch: 24 Batch: 50/50 Loss: 0.18153811991214752\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 5.749713127081917%. Word accuracy: 70.19999999999999%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"Epoch: 25\n",
"Train NN\n",
"Epoch: 25 Batch: 1/50 Loss: 0.1742667555809021\n",
"Epoch: 25 Batch: 2/50 Loss: 0.23276562988758087\n",
"Epoch: 25 Batch: 3/50 Loss: 0.1555560678243637\n",
"Epoch: 25 Batch: 4/50 Loss: 0.1907375156879425\n",
"Epoch: 25 Batch: 5/50 Loss: 0.1970178335905075\n",
"Epoch: 25 Batch: 6/50 Loss: 0.20461761951446533\n",
"Epoch: 25 Batch: 7/50 Loss: 0.1688222587108612\n",
"Epoch: 25 Batch: 8/50 Loss: 0.2159149944782257\n",
"Epoch: 25 Batch: 9/50 Loss: 0.19165107607841492\n",
"Epoch: 25 Batch: 10/50 Loss: 0.17587639391422272\n",
"Epoch: 25 Batch: 11/50 Loss: 0.24253104627132416\n",
"Epoch: 25 Batch: 12/50 Loss: 0.24101190268993378\n",
"Epoch: 25 Batch: 13/50 Loss: 0.18363964557647705\n",
"Epoch: 25 Batch: 14/50 Loss: 0.17877839505672455\n",
"Epoch: 25 Batch: 15/50 Loss: 0.19929203391075134\n",
"Epoch: 25 Batch: 16/50 Loss: 0.16217462718486786\n",
"Epoch: 25 Batch: 17/50 Loss: 0.21859212219715118\n",
"Epoch: 25 Batch: 18/50 Loss: 0.2737239897251129\n",
"Epoch: 25 Batch: 19/50 Loss: 0.22129997611045837\n",
"Epoch: 25 Batch: 20/50 Loss: 0.15266172587871552\n",
"Epoch: 25 Batch: 21/50 Loss: 0.29417020082473755\n",
"Epoch: 25 Batch: 22/50 Loss: 0.22638550400733948\n",
"Epoch: 25 Batch: 23/50 Loss: 0.21001514792442322\n",
"Epoch: 25 Batch: 24/50 Loss: 0.23133328557014465\n",
"Epoch: 25 Batch: 25/50 Loss: 0.2745514214038849\n",
"Epoch: 25 Batch: 26/50 Loss: 0.21322180330753326\n",
"Epoch: 25 Batch: 27/50 Loss: 0.18268857896327972\n",
"Epoch: 25 Batch: 28/50 Loss: 0.19321279227733612\n",
"Epoch: 25 Batch: 29/50 Loss: 0.19077026844024658\n",
"Epoch: 25 Batch: 30/50 Loss: 0.20857775211334229\n",
"Epoch: 25 Batch: 31/50 Loss: 0.3135610520839691\n",
"Epoch: 25 Batch: 32/50 Loss: 0.1940182000398636\n",
"Epoch: 25 Batch: 33/50 Loss: 0.2228972613811493\n",
"Epoch: 25 Batch: 34/50 Loss: 0.18511173129081726\n",
"Epoch: 25 Batch: 35/50 Loss: 0.21638929843902588\n",
"Epoch: 25 Batch: 36/50 Loss: 0.2449609786272049\n",
"Epoch: 25 Batch: 37/50 Loss: 0.18237976729869843\n",
"Epoch: 25 Batch: 38/50 Loss: 0.22109714150428772\n",
"Epoch: 25 Batch: 39/50 Loss: 0.16466699540615082\n",
"Epoch: 25 Batch: 40/50 Loss: 0.21127215027809143\n",
"Epoch: 25 Batch: 41/50 Loss: 0.2139977067708969\n",
"Epoch: 25 Batch: 42/50 Loss: 0.2365759015083313\n",
"Epoch: 25 Batch: 43/50 Loss: 0.20765243470668793\n",
"Epoch: 25 Batch: 44/50 Loss: 0.2396760731935501\n",
"Epoch: 25 Batch: 45/50 Loss: 0.21948140859603882\n",
"Epoch: 25 Batch: 46/50 Loss: 0.24839423596858978\n",
"Epoch: 25 Batch: 47/50 Loss: 0.25389227271080017\n",
"Epoch: 25 Batch: 48/50 Loss: 0.21766681969165802\n",
"Epoch: 25 Batch: 49/50 Loss: 0.24870643019676208\n",
"Epoch: 25 Batch: 50/50 Loss: 0.2895132005214691\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 4.848430832989829%. Word accuracy: 75.4875%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"Epoch: 26\n",
"Train NN\n",
"Epoch: 26 Batch: 1/50 Loss: 0.4369007647037506\n",
"Epoch: 26 Batch: 2/50 Loss: 0.22486867010593414\n",
"Epoch: 26 Batch: 3/50 Loss: 0.2338741421699524\n",
"Epoch: 26 Batch: 4/50 Loss: 0.3490847647190094\n",
"Epoch: 26 Batch: 5/50 Loss: 0.22322174906730652\n",
"Epoch: 26 Batch: 6/50 Loss: 0.3196069598197937\n",
"Epoch: 26 Batch: 7/50 Loss: 0.22190751135349274\n",
"Epoch: 26 Batch: 8/50 Loss: 0.29828542470932007\n",
"Epoch: 26 Batch: 9/50 Loss: 0.3457237184047699\n",
"Epoch: 26 Batch: 10/50 Loss: 0.21389465034008026\n",
"Epoch: 26 Batch: 11/50 Loss: 0.20403359830379486\n",
"Epoch: 26 Batch: 12/50 Loss: 0.3070683777332306\n",
"Epoch: 26 Batch: 13/50 Loss: 0.32952743768692017\n",
"Epoch: 26 Batch: 14/50 Loss: 0.27778443694114685\n",
"Epoch: 26 Batch: 15/50 Loss: 0.21637532114982605\n",
"Epoch: 26 Batch: 16/50 Loss: 0.2663151025772095\n",
"Epoch: 26 Batch: 17/50 Loss: 0.2107381671667099\n",
"Epoch: 26 Batch: 18/50 Loss: 0.24087393283843994\n",
"Epoch: 26 Batch: 19/50 Loss: 0.2917748987674713\n",
"Epoch: 26 Batch: 20/50 Loss: 0.22883883118629456\n",
"Epoch: 26 Batch: 21/50 Loss: 0.2947409451007843\n",
"Epoch: 26 Batch: 22/50 Loss: 0.376802533864975\n",
"Epoch: 26 Batch: 23/50 Loss: 0.2519984841346741\n",
"Epoch: 26 Batch: 24/50 Loss: 0.2361040711402893\n",
"Epoch: 26 Batch: 25/50 Loss: 0.20215536653995514\n",
"Epoch: 26 Batch: 26/50 Loss: 0.2230493575334549\n",
"Epoch: 26 Batch: 27/50 Loss: 0.28452932834625244\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch: 26 Batch: 28/50 Loss: 0.20797353982925415\n",
"Epoch: 26 Batch: 29/50 Loss: 0.27145710587501526\n",
"Epoch: 26 Batch: 30/50 Loss: 0.18407483398914337\n",
"Epoch: 26 Batch: 31/50 Loss: 0.23567400872707367\n",
"Epoch: 26 Batch: 32/50 Loss: 0.21618695557117462\n",
"Epoch: 26 Batch: 33/50 Loss: 0.3431153893470764\n",
"Epoch: 26 Batch: 34/50 Loss: 0.20588049292564392\n",
"Epoch: 26 Batch: 35/50 Loss: 0.2309478521347046\n",
"Epoch: 26 Batch: 36/50 Loss: 0.18103712797164917\n",
"Epoch: 26 Batch: 37/50 Loss: 0.19608627259731293\n",
"Epoch: 26 Batch: 38/50 Loss: 0.1585572212934494\n",
"Epoch: 26 Batch: 39/50 Loss: 0.15766441822052002\n",
"Epoch: 26 Batch: 40/50 Loss: 0.15690475702285767\n",
"Epoch: 26 Batch: 41/50 Loss: 0.1841581165790558\n",
"Epoch: 26 Batch: 42/50 Loss: 0.2387189418077469\n",
"Epoch: 26 Batch: 43/50 Loss: 0.16545644402503967\n",
"Epoch: 26 Batch: 44/50 Loss: 0.21772713959217072\n",
"Epoch: 26 Batch: 45/50 Loss: 0.22990773618221283\n",
"Epoch: 26 Batch: 46/50 Loss: 0.2305065095424652\n",
"Epoch: 26 Batch: 47/50 Loss: 0.20316751301288605\n",
"Epoch: 26 Batch: 48/50 Loss: 0.19588878750801086\n",
"Epoch: 26 Batch: 49/50 Loss: 0.20944249629974365\n",
"Epoch: 26 Batch: 50/50 Loss: 0.2073628455400467\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 5.490134913826718%. Word accuracy: 71.9375%.\n",
"Character error rate not improved, best so far: 4.433996947449337%\n",
"No more improvement since 25 epochs. Training stopped.\n"
]
}
],
"source": [
"# Reset graph\n",
"tf.compat.v1.reset_default_graph()\n",
"\n",
"# save characters of model for inference mode\n",
"open(FilePaths.fnCharList, 'w').write(str().join(loader.charList))\n",
"\n",
"# save words contained in dataset into file\n",
"open(FilePaths.fnCorpus, 'w').write(str(' ').join(loader.trainWords + loader.validationWords))\n",
"\n",
"# execute training or validation\n",
"model = Model(loader.charList, decoderType, corpus=word_corpus)\n",
"train(model, loader)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Validation"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/anaconda3/envs/blitz/lib/python3.7/site-packages/tensorflow/python/keras/legacy_tf_layers/normalization.py:308: UserWarning: `tf.layers.batch_normalization` is deprecated and will be removed in a future version. Please use `tf.keras.layers.BatchNormalization` instead. In particular, `tf.control_dependencies(tf.GraphKeys.UPDATE_OPS)` should not be used (consult the `tf.keras.layers.BatchNormalization` documentation).\n",
" '`tf.layers.batch_normalization` is deprecated and '\n",
"/anaconda3/envs/blitz/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer_v1.py:1719: UserWarning: `layer.apply` is deprecated and will be removed in a future version. Please use `layer.__call__` method instead.\n",
" warnings.warn('`layer.apply` is deprecated and '\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:`tf.nn.rnn_cell.MultiRNNCell` is deprecated. This class is equivalent as `tf.keras.layers.StackedRNNCells`, and will be replaced by that in Tensorflow 2.0.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/anaconda3/envs/blitz/lib/python3.7/site-packages/tensorflow/python/keras/layers/legacy_rnn/rnn_cell_impl.py:903: UserWarning: `tf.nn.rnn_cell.LSTMCell` is deprecated and will be removed in a future version. This class is equivalent as `tf.keras.layers.LSTMCell`, and will be replaced by that in Tensorflow 2.0.\n",
" warnings.warn(\"`tf.nn.rnn_cell.LSTMCell` is deprecated and will be \"\n",
"/anaconda3/envs/blitz/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer_v1.py:1727: UserWarning: `layer.add_variable` is deprecated and will be removed in a future version. Please use `layer.add_weight` method instead.\n",
" warnings.warn('`layer.add_variable` is deprecated and '\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Tensorflow: 2.4.0\n",
"Init with stored values from model/snapshot-1\n",
"INFO:tensorflow:Restoring parameters from model/snapshot-1\n",
"Validate NN\n",
"Batch: 1 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 2 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 3 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 4 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 5 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 6 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 7 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 8 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 9 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 10 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 11 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 12 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 13 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 14 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 15 / 16\n",
"Ground truth -> Recognized\n",
"Batch: 16 / 16\n",
"Ground truth -> Recognized\n",
"Character error rate: 4.433996947449337%. Word accuracy: 77.6875%.\n"
]
},
{
"data": {
"text/plain": [
"0.044339969474493375"
]
},
"execution_count": 71,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Reset graph\n",
"tf.compat.v1.reset_default_graph()\n",
"\n",
"# Specify parameters\n",
"decoderType = DecoderType.BeamSearch\n",
"loader = DataLoader(batch_size, imgSize, maxTextLen, nEpoch=nEpoch)\n",
"\n",
"# save characters of model for inference mode\n",
"open(FilePaths.fnCharList, 'w').write(str().join(loader.charList))\n",
"\n",
"# save words contained in dataset into file\n",
"open(FilePaths.fnCorpus, 'w').write(str(' ').join(loader.trainWords + loader.validationWords))\n",
"\n",
"# execute training or validation\n",
"model = Model(loader.charList, decoderType, mustRestore=True, corpus=word_corpus)\n",
"validate(model, loader)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Test on validation set"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/anaconda3/envs/blitz/lib/python3.7/site-packages/tensorflow/python/keras/legacy_tf_layers/normalization.py:308: UserWarning: `tf.layers.batch_normalization` is deprecated and will be removed in a future version. Please use `tf.keras.layers.BatchNormalization` instead. In particular, `tf.control_dependencies(tf.GraphKeys.UPDATE_OPS)` should not be used (consult the `tf.keras.layers.BatchNormalization` documentation).\n",
" '`tf.layers.batch_normalization` is deprecated and '\n",
"/anaconda3/envs/blitz/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer_v1.py:1719: UserWarning: `layer.apply` is deprecated and will be removed in a future version. Please use `layer.__call__` method instead.\n",
" warnings.warn('`layer.apply` is deprecated and '\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:`tf.nn.rnn_cell.MultiRNNCell` is deprecated. This class is equivalent as `tf.keras.layers.StackedRNNCells`, and will be replaced by that in Tensorflow 2.0.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/anaconda3/envs/blitz/lib/python3.7/site-packages/tensorflow/python/keras/layers/legacy_rnn/rnn_cell_impl.py:903: UserWarning: `tf.nn.rnn_cell.LSTMCell` is deprecated and will be removed in a future version. This class is equivalent as `tf.keras.layers.LSTMCell`, and will be replaced by that in Tensorflow 2.0.\n",
" warnings.warn(\"`tf.nn.rnn_cell.LSTMCell` is deprecated and will be \"\n",
"/anaconda3/envs/blitz/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer_v1.py:1727: UserWarning: `layer.add_variable` is deprecated and will be removed in a future version. Please use `layer.add_weight` method instead.\n",
" warnings.warn('`layer.add_variable` is deprecated and '\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Tensorflow: 2.4.0\n",
"Init with stored values from model/snapshot-1\n",
"INFO:tensorflow:Restoring parameters from model/snapshot-1\n",
"Test NN\n",
"Batch: 1 / 8\n",
"Ground truth -> Recognized\n",
"[OK] \"road\" -> \"road\"\n",
"[OK] \"splashes\" -> \"splashes\"\n",
"[OK] \"oscillations\" -> \"oscillations\"\n",
"[OK] \"header\" -> \"header\"\n",
"[OK] \"ranges\" -> \"ranges\"\n",
"[ERR:1] \"throttles\" -> \"throttle\"\n",
"[OK] \"caliber towers\" -> \"caliber towers\"\n",
"[OK] \"lever surfaces\" -> \"lever surfaces\"\n",
"[OK] \"freight\" -> \"freight\"\n",
"[OK] \"dispatch discharges\" -> \"dispatch discharges\"\n",
"[ERR:2] \"deposition limits\" -> \"deposition limbs\"\n",
"[OK] \"trails\" -> \"trails\"\n",
"[OK] \"grip cannon\" -> \"grip cannon\"\n",
"[OK] \"routine\" -> \"routine\"\n",
"[OK] \"deductions\" -> \"deductions\"\n",
"[OK] \"tickets\" -> \"tickets\"\n",
"[OK] \"presses cents\" -> \"presses cents\"\n",
"[OK] \"fats flicker\" -> \"fats flicker\"\n",
"[OK] \"teachings\" -> \"teachings\"\n",
"[OK] \"spears bullets\" -> \"spears bullets\"\n",
"[OK] \"deserter\" -> \"deserter\"\n",
"[OK] \"legging\" -> \"legging\"\n",
"[OK] \"arches\" -> \"arches\"\n",
"[ERR:3] \"justice rams\" -> \"justice can\"\n",
"[OK] \"chairmen\" -> \"chairmen\"\n",
"[OK] \"doorstep examinations\" -> \"doorstep examinations\"\n",
"[OK] \"fuses attachment\" -> \"fuses attachment\"\n",
"[OK] \"ram mine\" -> \"ram mine\"\n",
"[OK] \"press\" -> \"press\"\n",
"[OK] \"models\" -> \"models\"\n",
"[OK] \"dozens\" -> \"dozens\"\n",
"[ERR:4] \"investments\" -> \"investments gas\"\n",
"[OK] \"alias mirror\" -> \"alias mirror\"\n",
"[OK] \"windings roadside\" -> \"windings roadside\"\n",
"[OK] \"kettles calculation\" -> \"kettles calculation\"\n",
"[OK] \"task\" -> \"task\"\n",
"[OK] \"claws azimuths\" -> \"claws azimuths\"\n",
"[ERR:4] \"handful compass\" -> \"handful copy\"\n",
"[OK] \"tastes administrator\" -> \"tastes administrator\"\n",
"[OK] \"selections\" -> \"selections\"\n",
"[OK] \"hierarchies coats\" -> \"hierarchies coats\"\n",
"[OK] \"diver\" -> \"diver\"\n",
"[OK] \"apprehensions\" -> \"apprehensions\"\n",
"[ERR:1] \"destroyers\" -> \"destroyer\"\n",
"[OK] \"point\" -> \"point\"\n",
"[OK] \"barrier yaws\" -> \"barrier yaws\"\n",
"[ERR:4] \"slinging breakdown\" -> \"slinging bread\"\n",
"[OK] \"eligibility whirls\" -> \"eligibility whirls\"\n",
"[OK] \"dot flag\" -> \"dot flag\"\n",
"[OK] \"scratch stairs\" -> \"scratch stairs\"\n",
"[OK] \"descriptions compliance\" -> \"descriptions compliance\"\n",
"[OK] \"schedule streams\" -> \"schedule streams\"\n",
"[OK] \"promotion\" -> \"promotion\"\n",
"[OK] \"feeds scale\" -> \"feeds scale\"\n",
"[ERR:4] \"acceptances outlet\" -> \"acceptances auto\"\n",
"[OK] \"alternate violet\" -> \"alternate violet\"\n",
"[OK] \"developments\" -> \"developments\"\n",
"[OK] \"trim\" -> \"trim\"\n",
"[ERR:1] \"zone accident\" -> \"tone accident\"\n",
"[OK] \"tricks\" -> \"tricks\"\n",
"[OK] \"printouts\" -> \"printouts\"\n",
"[OK] \"civilians glows\" -> \"civilians glows\"\n",
"[OK] \"fighters\" -> \"fighters\"\n",
"[OK] \"punch\" -> \"punch\"\n",
"[OK] \"divider\" -> \"divider\"\n",
"[OK] \"captain\" -> \"captain\"\n",
"[ERR:4] \"subtask television\" -> \"subtask ecdevsion\"\n",
"[OK] \"hospital\" -> \"hospital\"\n",
"[OK] \"umbrellas chill\" -> \"umbrellas chill\"\n",
"[OK] \"desks\" -> \"desks\"\n",
"[OK] \"patterns\" -> \"patterns\"\n",
"[OK] \"milliliters ventilators\" -> \"milliliters ventilators\"\n",
"[OK] \"finger\" -> \"finger\"\n",
"[ERR:3] \"focus corrections\" -> \"boxes corrections\"\n",
"[OK] \"balloons\" -> \"balloons\"\n",
"[ERR:4] \"dab solders\" -> \"dab fold\"\n",
"[OK] \"chairperson\" -> \"chairperson\"\n",
"[ERR:1] \"chairperson\" -> \"chairpersons\"\n",
"[OK] \"worm\" -> \"worm\"\n",
"[OK] \"injuries libraries\" -> \"injuries libraries\"\n",
"[OK] \"opinions\" -> \"opinions\"\n",
"[OK] \"growths\" -> \"growths\"\n",
"[OK] \"argument noises\" -> \"argument noises\"\n",
"[OK] \"cabs\" -> \"cabs\"\n",
"[OK] \"thread\" -> \"thread\"\n",
"[OK] \"macro\" -> \"macro\"\n",
"[OK] \"aggravation\" -> \"aggravation\"\n",
"[OK] \"drainer combinations\" -> \"drainer combinations\"\n",
"[ERR:6] \"compass dynamometer\" -> \"commas dynamont\"\n",
"[OK] \"tray lens\" -> \"tray lens\"\n",
"[OK] \"jump shed\" -> \"jump shed\"\n",
"[OK] \"manufacturer faces\" -> \"manufacturer faces\"\n",
"[OK] \"leakage\" -> \"leakage\"\n",
"[OK] \"hair\" -> \"hair\"\n",
"[OK] \"award\" -> \"award\"\n",
"[OK] \"configuration\" -> \"configuration\"\n",
"[OK] \"drawers\" -> \"drawers\"\n",
"[OK] \"narcotics smile\" -> \"narcotics smile\"\n",
"[OK] \"recognitions skills\" -> \"recognitions skills\"\n",
"[ERR:2] \"relay bolts\" -> \"relay boils\"\n",
"[OK] \"crash\" -> \"crash\"\n",
"[OK] \"talkers debits\" -> \"talkers debits\"\n",
"[OK] \"couple inferences\" -> \"couple inferences\"\n",
"[OK] \"apostrophe\" -> \"apostrophe\"\n",
"[ERR:4] \"kiloliter\" -> \"filter\"\n",
"[OK] \"standard incomes\" -> \"standard incomes\"\n",
"[ERR:4] \"recordkeeping\" -> \"recordkepires\"\n",
"[ERR:1] \"submarines\" -> \"submarine\"\n",
"[OK] \"spares\" -> \"spares\"\n",
"[OK] \"ignitions\" -> \"ignitions\"\n",
"[OK] \"terminations ohms\" -> \"terminations ohms\"\n",
"[OK] \"acts consolidation\" -> \"acts consolidation\"\n",
"[OK] \"partitions\" -> \"partitions\"\n",
"[OK] \"feeders abbreviation\" -> \"feeders abbreviation\"\n",
"[OK] \"cough\" -> \"cough\"\n",
"[OK] \"reverse dust\" -> \"reverse dust\"\n",
"[OK] \"electricity diagrams\" -> \"electricity diagrams\"\n",
"[OK] \"grasses\" -> \"grasses\"\n",
"[OK] \"detail surge\" -> \"detail surge\"\n",
"[OK] \"islands revision\" -> \"islands revision\"\n",
"[OK] \"shields warnings\" -> \"shields warnings\"\n",
"[OK] \"hill leaving\" -> \"hill leaving\"\n",
"[OK] \"status cares\" -> \"status cares\"\n",
"[OK] \"aggravations stock\" -> \"aggravations stock\"\n",
"[OK] \"showers\" -> \"showers\"\n",
"[OK] \"motor\" -> \"motor\"\n",
"[OK] \"sleep\" -> \"sleep\"\n",
"[OK] \"activities bushing\" -> \"activities bushing\"\n",
"[OK] \"knobs\" -> \"knobs\"\n",
"[OK] \"slides\" -> \"slides\"\n",
"[OK] \"folds modes\" -> \"folds modes\"\n",
"[OK] \"records\" -> \"records\"\n",
"[ERR:3] \"blackboard february\" -> \"blackboard library\"\n",
"[OK] \"platters\" -> \"platters\"\n",
"[OK] \"interactions existence\" -> \"interactions existence\"\n",
"[OK] \"vapors\" -> \"vapors\"\n",
"[ERR:1] \"letter\" -> \"letters\"\n",
"[OK] \"couple\" -> \"couple\"\n",
"[ERR:1] \"spar subject\" -> \"spars subject\"\n",
"[OK] \"jacks\" -> \"jacks\"\n",
"[OK] \"claps\" -> \"claps\"\n",
"[OK] \"challenges behavior\" -> \"challenges behavior\"\n",
"[OK] \"zone\" -> \"zone\"\n",
"[OK] \"overlay asterisks\" -> \"overlay asterisks\"\n",
"[OK] \"fracture\" -> \"fracture\"\n",
"[OK] \"takeoff\" -> \"takeoff\"\n",
"[OK] \"chocks\" -> \"chocks\"\n",
"[OK] \"patterns\" -> \"patterns\"\n",
"[OK] \"lint\" -> \"lint\"\n",
"[OK] \"attorneys\" -> \"attorneys\"\n",
"[OK] \"trap\" -> \"trap\"\n",
"[OK] \"overvoltages mitts\" -> \"overvoltages mitts\"\n",
"[OK] \"interval lightning\" -> \"interval lightning\"\n",
"[OK] \"clothes ocean\" -> \"clothes ocean\"\n",
"[OK] \"skips\" -> \"skips\"\n",
"[OK] \"glance\" -> \"glance\"\n",
"[OK] \"question speech\" -> \"question speech\"\n",
"[OK] \"drainers\" -> \"drainers\"\n",
"[OK] \"selectors enclosure\" -> \"selectors enclosure\"\n",
"[OK] \"waters\" -> \"waters\"\n",
"[ERR:2] \"lakes\" -> \"axes\"\n",
"[OK] \"edge\" -> \"edge\"\n",
"[OK] \"minerals decrement\" -> \"minerals decrement\"\n",
"[OK] \"mentions wonder\" -> \"mentions wonder\"\n",
"[OK] \"originator morning\" -> \"originator morning\"\n",
"[OK] \"tourniquets\" -> \"tourniquets\"\n",
"[ERR:5] \"knowledge sundays\" -> \"knowledge juries\"\n",
"[OK] \"insignia\" -> \"insignia\"\n",
"[OK] \"dart\" -> \"dart\"\n",
"[OK] \"leaves colon\" -> \"leaves colon\"\n",
"[OK] \"purchaser\" -> \"purchaser\"\n",
"[ERR:1] \"knives milestones\" -> \"knives milestone\"\n",
"[ERR:2] \"visits canisters\" -> \"fists canisters\"\n",
"[OK] \"dispatchers hips\" -> \"dispatchers hips\"\n",
"[OK] \"friday\" -> \"friday\"\n",
"[OK] \"initiators\" -> \"initiators\"\n",
"[OK] \"set\" -> \"set\"\n",
"[OK] \"impulse\" -> \"impulse\"\n",
"[OK] \"motor benches\" -> \"motor benches\"\n",
"[OK] \"sheeting\" -> \"sheeting\"\n",
"[OK] \"fines cylinder\" -> \"fines cylinder\"\n",
"[OK] \"knee slate\" -> \"knee slate\"\n",
"[OK] \"overlay whirls\" -> \"overlay whirls\"\n",
"[OK] \"threes jars\" -> \"threes jars\"\n",
"[ERR:1] \"wind\" -> \"win\"\n",
"[OK] \"airship\" -> \"airship\"\n",
"[OK] \"hopes jars\" -> \"hopes jars\"\n",
"[OK] \"tactic drug\" -> \"tactic drug\"\n",
"[OK] \"hinge engineers\" -> \"hinge engineers\"\n",
"[OK] \"temper\" -> \"temper\"\n",
"[OK] \"vapor\" -> \"vapor\"\n",
"[OK] \"crowd\" -> \"crowd\"\n",
"[OK] \"layer\" -> \"layer\"\n",
"[OK] \"interface cash\" -> \"interface cash\"\n",
"[OK] \"descriptions\" -> \"descriptions\"\n",
"[OK] \"ringing groom\" -> \"ringing groom\"\n",
"[OK] \"controls\" -> \"controls\"\n",
"[ERR:1] \"hats\" -> \"bats\"\n",
"[OK] \"ends\" -> \"ends\"\n",
"[OK] \"jump\" -> \"jump\"\n",
"[OK] \"change\" -> \"change\"\n",
"[OK] \"veteran loss\" -> \"veteran loss\"\n",
"[OK] \"lumps\" -> \"lumps\"\n",
"[OK] \"nail\" -> \"nail\"\n",
"[OK] \"classification latch\" -> \"classification latch\"\n",
"[OK] \"traces\" -> \"traces\"\n",
"[OK] \"self courses\" -> \"self courses\"\n",
"[OK] \"patient\" -> \"patient\"\n",
"[OK] \"ladders bone\" -> \"ladders bone\"\n",
"[OK] \"land\" -> \"land\"\n",
"[ERR:5] \"professions forest\" -> \"professions brook\"\n",
"[ERR:1] \"weight senses\" -> \"weight sense\"\n",
"[OK] \"scenes\" -> \"scenes\"\n",
"[OK] \"slap\" -> \"slap\"\n",
"[OK] \"presumption mistakes\" -> \"presumption mistakes\"\n",
"[OK] \"period stopper\" -> \"period stopper\"\n",
"[OK] \"share\" -> \"share\"\n",
"[OK] \"strike junctions\" -> \"strike junctions\"\n",
"[OK] \"words gate\" -> \"words gate\"\n",
"[OK] \"destroyer launchers\" -> \"destroyer launchers\"\n",
"[OK] \"electrician\" -> \"electrician\"\n",
"[OK] \"batteries\" -> \"batteries\"\n",
"[OK] \"exhaust\" -> \"exhaust\"\n",
"[OK] \"allegations\" -> \"allegations\"\n",
"[OK] \"digits glance\" -> \"digits glance\"\n",
"[OK] \"markets\" -> \"markets\"\n",
"[OK] \"education\" -> \"education\"\n",
"[OK] \"tailor\" -> \"tailor\"\n",
"[OK] \"scores indication\" -> \"scores indication\"\n",
"[ERR:1] \"thermometers magneto\" -> \"thermometers magnet\"\n",
"[OK] \"district nurse\" -> \"district nurse\"\n",
"[OK] \"readings\" -> \"readings\"\n",
"[OK] \"wonders\" -> \"wonders\"\n",
"[OK] \"headings\" -> \"headings\"\n",
"[OK] \"rolls\" -> \"rolls\"\n",
"[OK] \"reliabilities\" -> \"reliabilities\"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[OK] \"calories\" -> \"calories\"\n",
"[ERR:4] \"tickets responsibility\" -> \"tickets responsbit\"\n",
"[OK] \"desk\" -> \"desk\"\n",
"[ERR:4] \"thimble population\" -> \"thimble duration\"\n",
"[OK] \"integers\" -> \"integers\"\n",
"[ERR:2] \"dawn\" -> \"dab\"\n",
"[OK] \"blood\" -> \"blood\"\n",
"[OK] \"dish\" -> \"dish\"\n",
"[OK] \"loop certifications\" -> \"loop certifications\"\n",
"[OK] \"jugs\" -> \"jugs\"\n",
"[OK] \"jigs heading\" -> \"jigs heading\"\n",
"[OK] \"administrations\" -> \"administrations\"\n",
"[OK] \"jails sweepers\" -> \"jails sweepers\"\n",
"[OK] \"ingredients investment\" -> \"ingredients investment\"\n",
"[OK] \"thunder\" -> \"thunder\"\n",
"[OK] \"trackers dot\" -> \"trackers dot\"\n",
"[OK] \"make\" -> \"make\"\n",
"[OK] \"stomach\" -> \"stomach\"\n",
"[OK] \"launchers dose\" -> \"launchers dose\"\n",
"[OK] \"rails\" -> \"rails\"\n",
"[OK] \"tour administration\" -> \"tour administration\"\n",
"[OK] \"trainers\" -> \"trainers\"\n",
"[OK] \"shoulder\" -> \"shoulder\"\n",
"[OK] \"presentations sea\" -> \"presentations sea\"\n",
"[OK] \"counsels cartridge\" -> \"counsels cartridge\"\n",
"[ERR:1] \"employees topic\" -> \"employee topic\"\n",
"[ERR:1] \"versions advancements\" -> \"versions advancement\"\n",
"[OK] \"cabinets parentheses\" -> \"cabinets parentheses\"\n",
"[ERR:1] \"agents cylinders\" -> \"agents cylinder\"\n",
"[ERR:8] \"occurrences monoliths\" -> \"occurrences locker\"\n",
"[ERR:4] \"discontinuance kilogram\" -> \"discontinuance gram\"\n",
"[OK] \"slinging\" -> \"slinging\"\n",
"[OK] \"investigations counts\" -> \"investigations counts\"\n",
"[OK] \"barometer\" -> \"barometer\"\n",
"[OK] \"west\" -> \"west\"\n",
"[OK] \"identification\" -> \"identification\"\n",
"[ERR:1] \"lights slap\" -> \"lights slaps\"\n",
"[OK] \"assault nods\" -> \"assault nods\"\n",
"[OK] \"prompts\" -> \"prompts\"\n",
"[ERR:3] \"sprayers zips\" -> \"sprayers crops\"\n",
"[OK] \"complaint wholesales\" -> \"complaint wholesales\"\n",
"[OK] \"radio\" -> \"radio\"\n",
"[OK] \"filter\" -> \"filter\"\n",
"[ERR:9] \"identification midwatch\" -> \"indication midators\"\n",
"[OK] \"stress\" -> \"stress\"\n",
"[OK] \"trouble\" -> \"trouble\"\n",
"[ERR:8] \"tabulation throttle\" -> \"baby action sthratoe\"\n",
"[OK] \"clericals\" -> \"clericals\"\n",
"[ERR:3] \"materials priorities\" -> \"materials parities\"\n",
"[OK] \"hunt radar\" -> \"hunt radar\"\n",
"[OK] \"plan operation\" -> \"plan operation\"\n",
"[OK] \"bulb\" -> \"bulb\"\n",
"[OK] \"firearm\" -> \"firearm\"\n",
"[OK] \"crimes\" -> \"crimes\"\n",
"[OK] \"infection\" -> \"infection\"\n",
"[ERR:5] \"medals midwatch\" -> \"medals idea\"\n",
"[OK] \"committees\" -> \"committees\"\n",
"[OK] \"thicknesses\" -> \"thicknesses\"\n",
"[OK] \"math\" -> \"math\"\n",
"[OK] \"suggestion recruit\" -> \"suggestion recruit\"\n",
"[OK] \"bullets chases\" -> \"bullets chases\"\n",
"[OK] \"radio\" -> \"radio\"\n",
"[OK] \"second kisses\" -> \"second kisses\"\n",
"[OK] \"cages\" -> \"cages\"\n",
"[OK] \"studies\" -> \"studies\"\n",
"[OK] \"choice berths\" -> \"choice berths\"\n",
"[OK] \"furs\" -> \"furs\"\n",
"[OK] \"computers\" -> \"computers\"\n",
"[OK] \"fences\" -> \"fences\"\n",
"[OK] \"fountain\" -> \"fountain\"\n",
"[OK] \"agent printouts\" -> \"agent printouts\"\n",
"[OK] \"capacitances\" -> \"capacitances\"\n",
"[OK] \"spikes\" -> \"spikes\"\n",
"[OK] \"warranties guests\" -> \"warranties guests\"\n",
"[OK] \"typists selectors\" -> \"typists selectors\"\n",
"[OK] \"titles traces\" -> \"titles traces\"\n",
"[OK] \"recapitulation accruement\" -> \"recapitulation accruement\"\n",
"[OK] \"tackles\" -> \"tackles\"\n",
"[OK] \"sun\" -> \"sun\"\n",
"[OK] \"ceremony schoolroom\" -> \"ceremony schoolroom\"\n",
"[OK] \"finish confinement\" -> \"finish confinement\"\n",
"[OK] \"justice\" -> \"justice\"\n",
"[OK] \"span\" -> \"span\"\n",
"[OK] \"orifice\" -> \"orifice\"\n",
"[OK] \"nation income\" -> \"nation income\"\n",
"[OK] \"alcoholics\" -> \"alcoholics\"\n",
"[OK] \"generals\" -> \"generals\"\n",
"[OK] \"calls\" -> \"calls\"\n",
"[OK] \"sediment oxide\" -> \"sediment oxide\"\n",
"[OK] \"sunday\" -> \"sunday\"\n",
"[OK] \"siren\" -> \"siren\"\n",
"[OK] \"here\" -> \"here\"\n",
"[OK] \"vendors\" -> \"vendors\"\n",
"[OK] \"excesses thirties\" -> \"excesses thirties\"\n",
"[OK] \"desks notice\" -> \"desks notice\"\n",
"[OK] \"duty quarterdeck\" -> \"duty quarterdeck\"\n",
"[OK] \"attacker warehouses\" -> \"attacker warehouses\"\n",
"[OK] \"perforators\" -> \"perforators\"\n",
"[OK] \"chain towels\" -> \"chain towels\"\n",
"[OK] \"legislation nod\" -> \"legislation nod\"\n",
"[OK] \"education\" -> \"education\"\n",
"[OK] \"cores\" -> \"cores\"\n",
"[ERR:5] \"establishment splint\" -> \"establishments air\"\n",
"[ERR:2] \"steam beds\" -> \"steam bet\"\n",
"[OK] \"walls\" -> \"walls\"\n",
"[OK] \"vector\" -> \"vector\"\n",
"[OK] \"liquor feelings\" -> \"liquor feelings\"\n",
"[OK] \"densities chambers\" -> \"densities chambers\"\n",
"[OK] \"lakes carpet\" -> \"lakes carpet\"\n",
"[OK] \"offices tips\" -> \"offices tips\"\n",
"[OK] \"staplers consolidation\" -> \"staplers consolidation\"\n",
"[ERR:3] \"leakages scratchpads\" -> \"leaves scratchpads\"\n",
"[OK] \"gear splash\" -> \"gear splash\"\n",
"[OK] \"diagnosis\" -> \"diagnosis\"\n",
"[OK] \"request probes\" -> \"request probes\"\n",
"[OK] \"wools coasts\" -> \"wools coasts\"\n",
"[OK] \"fares\" -> \"fares\"\n",
"[OK] \"retractors\" -> \"retractors\"\n",
"[OK] \"scratch\" -> \"scratch\"\n",
"[OK] \"rail\" -> \"rail\"\n",
"[OK] \"moments\" -> \"moments\"\n",
"[OK] \"detent complement\" -> \"detent complement\"\n",
"[OK] \"polices boom\" -> \"polices boom\"\n",
"[OK] \"glasses railways\" -> \"glasses railways\"\n",
"[OK] \"petitions\" -> \"petitions\"\n",
"[OK] \"boats\" -> \"boats\"\n",
"[OK] \"bullets\" -> \"bullets\"\n",
"[OK] \"cabinets gleams\" -> \"cabinets gleams\"\n",
"[OK] \"proportion locomotives\" -> \"proportion locomotives\"\n",
"[OK] \"specializations trace\" -> \"specializations trace\"\n",
"[OK] \"glossary tellers\" -> \"glossary tellers\"\n",
"[OK] \"gleams foods\" -> \"gleams foods\"\n",
"[OK] \"motion\" -> \"motion\"\n",
"[OK] \"documents picture\" -> \"documents picture\"\n",
"[OK] \"thursday\" -> \"thursday\"\n",
"[OK] \"seas\" -> \"seas\"\n",
"[OK] \"audit sand\" -> \"audit sand\"\n",
"[OK] \"balances\" -> \"balances\"\n",
"[ERR:1] \"paygrades\" -> \"paygrade\"\n",
"[OK] \"usages\" -> \"usages\"\n",
"[OK] \"student picks\" -> \"student picks\"\n",
"[ERR:2] \"worry directives\" -> \"word directives\"\n",
"[OK] \"organs lint\" -> \"organs lint\"\n",
"[OK] \"use basics\" -> \"use basics\"\n",
"[OK] \"alternates\" -> \"alternates\"\n",
"[OK] \"fifths abbreviations\" -> \"fifths abbreviations\"\n",
"[OK] \"roadside\" -> \"roadside\"\n",
"[OK] \"tractors locations\" -> \"tractors locations\"\n",
"[OK] \"lifetime collisions\" -> \"lifetime collisions\"\n",
"[OK] \"crystals\" -> \"crystals\"\n",
"[ERR:2] \"staplers\" -> \"staple\"\n",
"[OK] \"morals\" -> \"morals\"\n",
"[OK] \"duplicate raise\" -> \"duplicate raise\"\n",
"[OK] \"hull\" -> \"hull\"\n",
"[OK] \"sale\" -> \"sale\"\n",
"[ERR:2] \"guess\" -> \"glues\"\n",
"[OK] \"wait amplitudes\" -> \"wait amplitudes\"\n",
"[ERR:1] \"manifest\" -> \"manifests\"\n",
"[OK] \"tackles\" -> \"tackles\"\n",
"[OK] \"paneling\" -> \"paneling\"\n",
"[OK] \"fluids planes\" -> \"fluids planes\"\n",
"[OK] \"acceptances\" -> \"acceptances\"\n",
"[OK] \"fort battleship\" -> \"fort battleship\"\n",
"[OK] \"parallels films\" -> \"parallels films\"\n",
"[OK] \"voltage\" -> \"voltage\"\n",
"[OK] \"privilege\" -> \"privilege\"\n",
"[ERR:2] \"safety boost\" -> \"safety boat\"\n",
"[OK] \"painters reactor\" -> \"painters reactor\"\n",
"[OK] \"roof\" -> \"roof\"\n",
"[OK] \"cushions\" -> \"cushions\"\n",
"[OK] \"washtub\" -> \"washtub\"\n",
"[OK] \"refund\" -> \"refund\"\n",
"[OK] \"purchase\" -> \"purchase\"\n",
"[OK] \"cot\" -> \"cot\"\n",
"[ERR:4] \"safeguards realignments\" -> \"safeguards realigenr\"\n",
"[OK] \"soups supervisor\" -> \"soups supervisor\"\n",
"[OK] \"reenlistments formation\" -> \"reenlistments formation\"\n",
"[OK] \"coordinates veterans\" -> \"coordinates veterans\"\n",
"[OK] \"leg squeak\" -> \"leg squeak\"\n",
"[ERR:2] \"claw proficiencies\" -> \"car proficiencies\"\n",
"[ERR:2] \"deflectors nylons\" -> \"deflectors colons\"\n",
"[OK] \"benefit\" -> \"benefit\"\n",
"[OK] \"bet\" -> \"bet\"\n",
"[OK] \"juries sweeps\" -> \"juries sweeps\"\n",
"[OK] \"shoe capacitors\" -> \"shoe capacitors\"\n",
"[OK] \"societies snaps\" -> \"societies snaps\"\n",
"[OK] \"bushel\" -> \"bushel\"\n",
"[OK] \"prison rugs\" -> \"prison rugs\"\n",
"[OK] \"motion\" -> \"motion\"\n",
"[ERR:2] \"stove\" -> \"stones\"\n",
"[OK] \"floors stoppers\" -> \"floors stoppers\"\n",
"[OK] \"discussion runner\" -> \"discussion runner\"\n",
"[ERR:1] \"amusements\" -> \"amusement\"\n",
"[OK] \"figure\" -> \"figure\"\n",
"[OK] \"effect tricks\" -> \"effect tricks\"\n",
"[OK] \"offender\" -> \"offender\"\n",
"[OK] \"additive\" -> \"additive\"\n",
"[OK] \"watt stalls\" -> \"watt stalls\"\n",
"[OK] \"silk\" -> \"silk\"\n",
"[OK] \"subsystem mechanics\" -> \"subsystem mechanics\"\n",
"[OK] \"tourniquets conjectures\" -> \"tourniquets conjectures\"\n",
"[OK] \"preparations setup\" -> \"preparations setup\"\n",
"[OK] \"drawers drug\" -> \"drawers drug\"\n",
"[ERR:5] \"toothpicks hickory\" -> \"toothpicks hill\"\n",
"[OK] \"dishes\" -> \"dishes\"\n",
"[OK] \"raises ohm\" -> \"raises ohm\"\n",
"[OK] \"limbs sorts\" -> \"limbs sorts\"\n",
"[ERR:1] \"acquisitions\" -> \"acquisition\"\n",
"[OK] \"details\" -> \"details\"\n",
"[OK] \"chiefs cheaters\" -> \"chiefs cheaters\"\n",
"[OK] \"lakes\" -> \"lakes\"\n",
"[OK] \"man\" -> \"man\"\n",
"[OK] \"object\" -> \"object\"\n",
"[OK] \"admiral\" -> \"admiral\"\n",
"[OK] \"job\" -> \"job\"\n",
"[OK] \"nonavailabilities\" -> \"nonavailabilities\"\n",
"[OK] \"vent careers\" -> \"vent careers\"\n",
"[OK] \"gate\" -> \"gate\"\n",
"[OK] \"cave alcoholics\" -> \"cave alcoholics\"\n",
"[OK] \"waves dozens\" -> \"waves dozens\"\n",
"[OK] \"shields\" -> \"shields\"\n",
"[OK] \"clumps\" -> \"clumps\"\n",
"[OK] \"worm beams\" -> \"worm beams\"\n",
"[ERR:3] \"vibrations takeoff\" -> \"vibrations sakof\"\n",
"[OK] \"clips break\" -> \"clips break\"\n",
"[OK] \"net improvements\" -> \"net improvements\"\n",
"[OK] \"interests seconds\" -> \"interests seconds\"\n",
"[OK] \"paints steels\" -> \"paints steels\"\n",
"[OK] \"emergencies\" -> \"emergencies\"\n",
"[OK] \"recapitulations\" -> \"recapitulations\"\n",
"[OK] \"forks\" -> \"forks\"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ERR:7] \"alignments appropriations\" -> \"alignment aprorias\"\n",
"[OK] \"alcoholics\" -> \"alcoholics\"\n",
"[OK] \"skill\" -> \"skill\"\n",
"[OK] \"chambers thing\" -> \"chambers thing\"\n",
"[OK] \"dye\" -> \"dye\"\n",
"[OK] \"schooling\" -> \"schooling\"\n",
"[OK] \"waves suspect\" -> \"waves suspect\"\n",
"[OK] \"packs\" -> \"packs\"\n",
"[OK] \"tuesdays river\" -> \"tuesdays river\"\n",
"[OK] \"things ores\" -> \"things ores\"\n",
"[OK] \"stator consequence\" -> \"stator consequence\"\n",
"[OK] \"warranty\" -> \"warranty\"\n",
"[OK] \"brain\" -> \"brain\"\n",
"[OK] \"needle exhibit\" -> \"needle exhibit\"\n",
"[OK] \"asterisk\" -> \"asterisk\"\n",
"[OK] \"piers\" -> \"piers\"\n",
"[OK] \"rescue\" -> \"rescue\"\n",
"[OK] \"cement\" -> \"cement\"\n",
"[ERR:4] \"terminator standard\" -> \"terminator stars\"\n",
"[OK] \"endeavors pump\" -> \"endeavors pump\"\n",
"[OK] \"whip\" -> \"whip\"\n",
"[OK] \"splicer\" -> \"splicer\"\n",
"[OK] \"backs\" -> \"backs\"\n",
"[OK] \"parts chip\" -> \"parts chip\"\n",
"[OK] \"story\" -> \"story\"\n",
"[OK] \"histories\" -> \"histories\"\n",
"[OK] \"swell\" -> \"swell\"\n",
"[OK] \"calendars\" -> \"calendars\"\n",
"[OK] \"chairmen hem\" -> \"chairmen hem\"\n",
"[OK] \"strokes chains\" -> \"strokes chains\"\n",
"[OK] \"house\" -> \"house\"\n",
"[ERR:6] \"entrapments categories\" -> \"entrapments cage\"\n",
"[OK] \"lids slaves\" -> \"lids slaves\"\n",
"Batch: 2 / 8\n",
"Ground truth -> Recognized\n",
"[OK] \"tenth boy\" -> \"tenth boy\"\n",
"[OK] \"dose\" -> \"dose\"\n",
"[OK] \"stretcher\" -> \"stretcher\"\n",
"[OK] \"agreements educators\" -> \"agreements educators\"\n",
"[OK] \"june\" -> \"june\"\n",
"[OK] \"cannons\" -> \"cannons\"\n",
"[OK] \"budgets rebounds\" -> \"budgets rebounds\"\n",
"[OK] \"boil\" -> \"boil\"\n",
"[OK] \"rope mechanic\" -> \"rope mechanic\"\n",
"[ERR:3] \"animals kits\" -> \"animals butt\"\n",
"[OK] \"buckets\" -> \"buckets\"\n",
"[OK] \"tan canal\" -> \"tan canal\"\n",
"[OK] \"gyro\" -> \"gyro\"\n",
"[ERR:10] \"addressees lanes\" -> \"depot ages\"\n",
"[OK] \"carelessness\" -> \"carelessness\"\n",
"[OK] \"violet poison\" -> \"violet poison\"\n",
"[OK] \"sip\" -> \"sip\"\n",
"[OK] \"growth lender\" -> \"growth lender\"\n",
"[OK] \"quota twenties\" -> \"quota twenties\"\n",
"[OK] \"bunches\" -> \"bunches\"\n",
"[OK] \"grove mattresses\" -> \"grove mattresses\"\n",
"[OK] \"props rust\" -> \"props rust\"\n",
"[OK] \"conspiracy stomachs\" -> \"conspiracy stomachs\"\n",
"[OK] \"designators\" -> \"designators\"\n",
"[OK] \"separation\" -> \"separation\"\n",
"[OK] \"appearances admiral\" -> \"appearances admiral\"\n",
"[OK] \"shortages\" -> \"shortages\"\n",
"[OK] \"encounters drift\" -> \"encounters drift\"\n",
"[OK] \"pistons\" -> \"pistons\"\n",
"[ERR:4] \"balls folders\" -> \"half holders\"\n",
"[OK] \"disciplines\" -> \"disciplines\"\n",
"[OK] \"instrumentation\" -> \"instrumentation\"\n",
"[OK] \"illustrations\" -> \"illustrations\"\n",
"[OK] \"tenth\" -> \"tenth\"\n",
"[OK] \"buses\" -> \"buses\"\n",
"[OK] \"carburetors splashes\" -> \"carburetors splashes\"\n",
"[OK] \"mosses combination\" -> \"mosses combination\"\n",
"[OK] \"struts\" -> \"struts\"\n",
"[OK] \"washing\" -> \"washing\"\n",
"[OK] \"rack acronyms\" -> \"rack acronyms\"\n",
"[OK] \"henrys navigators\" -> \"henrys navigators\"\n",
"[OK] \"recognitions\" -> \"recognitions\"\n",
"[OK] \"court cent\" -> \"court cent\"\n",
"[ERR:6] \"compresses attack\" -> \"compresses crops\"\n",
"[OK] \"drug\" -> \"drug\"\n",
"[OK] \"slaps access\" -> \"slaps access\"\n",
"[OK] \"candle finish\" -> \"candle finish\"\n",
"[OK] \"indicate\" -> \"indicate\"\n",
"[OK] \"june\" -> \"june\"\n",
"[OK] \"flare publications\" -> \"flare publications\"\n",
"[OK] \"steeples balance\" -> \"steeples balance\"\n",
"[OK] \"flanges dives\" -> \"flanges dives\"\n",
"[ERR:3] \"physics\" -> \"pay sips\"\n",
"[OK] \"gasoline\" -> \"gasoline\"\n",
"[OK] \"governor toolboxes\" -> \"governor toolboxes\"\n",
"[OK] \"sanitation\" -> \"sanitation\"\n",
"[OK] \"twine sides\" -> \"twine sides\"\n",
"[ERR:3] \"expenditure secretaries\" -> \"expenditure secteaties\"\n",
"[OK] \"tenth\" -> \"tenth\"\n",
"[OK] \"lees offices\" -> \"lees offices\"\n",
"[OK] \"kill\" -> \"kill\"\n",
"[ERR:6] \"modules fines\" -> \"modules\"\n",
"[OK] \"filler\" -> \"filler\"\n",
"[OK] \"miner\" -> \"miner\"\n",
"[OK] \"boots alignments\" -> \"boots alignments\"\n",
"[OK] \"guidelines\" -> \"guidelines\"\n",
"[OK] \"canals classification\" -> \"canals classification\"\n",
"[OK] \"feeder\" -> \"feeder\"\n",
"[OK] \"laundry\" -> \"laundry\"\n",
"[OK] \"cent\" -> \"cent\"\n",
"[OK] \"ditches comforts\" -> \"ditches comforts\"\n",
"[OK] \"costs delivery\" -> \"costs delivery\"\n",
"[OK] \"tracker arrivals\" -> \"tracker arrivals\"\n",
"[OK] \"calibration diagonals\" -> \"calibration diagonals\"\n",
"[OK] \"marines\" -> \"marines\"\n",
"[OK] \"cane compress\" -> \"cane compress\"\n",
"[OK] \"thumbs oars\" -> \"thumbs oars\"\n",
"[ERR:4] \"member\" -> \"meat\"\n",
"[OK] \"rams\" -> \"rams\"\n",
"[ERR:2] \"glass breads\" -> \"gas breads\"\n",
"[OK] \"chits\" -> \"chits\"\n",
"[ERR:6] \"airspeed responsibilities\" -> \"airspeed resnbilitity\"\n",
"[OK] \"leathers\" -> \"leathers\"\n",
"[OK] \"pint\" -> \"pint\"\n",
"[OK] \"utilities establishment\" -> \"utilities establishment\"\n",
"[OK] \"accord\" -> \"accord\"\n",
"[OK] \"brakes\" -> \"brakes\"\n",
"[OK] \"detention relay\" -> \"detention relay\"\n",
"[OK] \"comparison\" -> \"comparison\"\n",
"[OK] \"action\" -> \"action\"\n",
"[ERR:2] \"brain rank\" -> \"brain can\"\n",
"[OK] \"half surpluses\" -> \"half surpluses\"\n",
"[OK] \"pitches emergencies\" -> \"pitches emergencies\"\n",
"[ERR:1] \"shares accusation\" -> \"shares accusations\"\n",
"[ERR:4] \"table surprises\" -> \"table surprar\"\n",
"[OK] \"handfuls\" -> \"handfuls\"\n",
"[OK] \"threaders\" -> \"threaders\"\n",
"[OK] \"evacuation foreheads\" -> \"evacuation foreheads\"\n",
"[OK] \"misfit chair\" -> \"misfit chair\"\n",
"[OK] \"honor\" -> \"honor\"\n",
"[OK] \"seventies\" -> \"seventies\"\n",
"[OK] \"coordinate\" -> \"coordinate\"\n",
"[OK] \"tractor casualty\" -> \"tractor casualty\"\n",
"[OK] \"jaw rays\" -> \"jaw rays\"\n",
"[OK] \"pyramids\" -> \"pyramids\"\n",
"[OK] \"stretchers\" -> \"stretchers\"\n",
"[OK] \"odors\" -> \"odors\"\n",
"[OK] \"depth\" -> \"depth\"\n",
"[OK] \"props\" -> \"props\"\n",
"[ERR:1] \"crack\" -> \"cracks\"\n",
"[OK] \"nonavailability\" -> \"nonavailability\"\n",
"[OK] \"friction\" -> \"friction\"\n",
"[OK] \"compiler\" -> \"compiler\"\n",
"[OK] \"braid\" -> \"braid\"\n",
"[OK] \"cliffs date\" -> \"cliffs date\"\n",
"[OK] \"goal laugh\" -> \"goal laugh\"\n",
"[OK] \"thirties\" -> \"thirties\"\n",
"[OK] \"freedom\" -> \"freedom\"\n",
"[OK] \"sir phases\" -> \"sir phases\"\n",
"[OK] \"brush\" -> \"brush\"\n",
"[OK] \"addressee\" -> \"addressee\"\n",
"[OK] \"possessions\" -> \"possessions\"\n",
"[OK] \"messes\" -> \"messes\"\n",
"[OK] \"hospitals\" -> \"hospitals\"\n",
"[OK] \"sewage ride\" -> \"sewage ride\"\n",
"[OK] \"harpoon\" -> \"harpoon\"\n",
"[ERR:5] \"gaps splice\" -> \"gaps sons\"\n",
"[ERR:5] \"company knobs\" -> \"company bank\"\n",
"[OK] \"developments stem\" -> \"developments stem\"\n",
"[OK] \"addressees\" -> \"addressees\"\n",
"[OK] \"attraction\" -> \"attraction\"\n",
"[ERR:7] \"subfunctions oxygen\" -> \"subfunctions\"\n",
"[OK] \"ears\" -> \"ears\"\n",
"[OK] \"tackles\" -> \"tackles\"\n",
"[OK] \"mile\" -> \"mile\"\n",
"[OK] \"strands\" -> \"strands\"\n",
"[OK] \"lists swimmer\" -> \"lists swimmer\"\n",
"[OK] \"brains colons\" -> \"brains colons\"\n",
"[OK] \"track\" -> \"track\"\n",
"[OK] \"speeds street\" -> \"speeds street\"\n",
"[OK] \"coats brother\" -> \"coats brother\"\n",
"[OK] \"rollout\" -> \"rollout\"\n",
"[OK] \"beacons angles\" -> \"beacons angles\"\n",
"[OK] \"fathom\" -> \"fathom\"\n",
"[OK] \"base\" -> \"base\"\n",
"[OK] \"area beads\" -> \"area beads\"\n",
"[OK] \"surveys\" -> \"surveys\"\n",
"[OK] \"expenses stamps\" -> \"expenses stamps\"\n",
"[OK] \"goods interaction\" -> \"goods interaction\"\n",
"[OK] \"charts alternative\" -> \"charts alternative\"\n",
"[OK] \"forests\" -> \"forests\"\n",
"[ERR:3] \"traffic programmer\" -> \"traffic programs\"\n",
"[OK] \"summers\" -> \"summers\"\n",
"[OK] \"misalinements\" -> \"misalinements\"\n",
"[ERR:9] \"overloads altimeter\" -> \"overload darts\"\n",
"[OK] \"deserter\" -> \"deserter\"\n",
"[OK] \"batch\" -> \"batch\"\n",
"[OK] \"ivory\" -> \"ivory\"\n",
"[OK] \"regret fall\" -> \"regret fall\"\n",
"[OK] \"roar offer\" -> \"roar offer\"\n",
"[OK] \"ceiling contamination\" -> \"ceiling contamination\"\n",
"[OK] \"buses\" -> \"buses\"\n",
"[OK] \"tractor buttons\" -> \"tractor buttons\"\n",
"[OK] \"rim\" -> \"rim\"\n",
"[OK] \"tag\" -> \"tag\"\n",
"[OK] \"seam rejections\" -> \"seam rejections\"\n",
"[OK] \"suppressions\" -> \"suppressions\"\n",
"[OK] \"facilities rounds\" -> \"facilities rounds\"\n",
"[OK] \"beginner splitter\" -> \"beginner splitter\"\n",
"[OK] \"custom catches\" -> \"custom catches\"\n",
"[ERR:1] \"hundred lot\" -> \"hundred dot\"\n",
"[ERR:6] \"shoulder discussions\" -> \"shoulder disgust\"\n",
"[OK] \"resources provisions\" -> \"resources provisions\"\n",
"[OK] \"tills\" -> \"tills\"\n",
"[ERR:4] \"ammonia cuff\" -> \"ammonia arch\"\n",
"[OK] \"sill\" -> \"sill\"\n",
"[OK] \"fare manners\" -> \"fare manners\"\n",
"[OK] \"chairwoman\" -> \"chairwoman\"\n",
"[OK] \"lines\" -> \"lines\"\n",
"[OK] \"latches\" -> \"latches\"\n",
"[OK] \"pails sled\" -> \"pails sled\"\n",
"[OK] \"apparatus disk\" -> \"apparatus disk\"\n",
"[ERR:2] \"tent legging\" -> \"tent leaving\"\n",
"[OK] \"mattress\" -> \"mattress\"\n",
"[OK] \"weeds levers\" -> \"weeds levers\"\n",
"[OK] \"trash carbons\" -> \"trash carbons\"\n",
"[OK] \"calendars\" -> \"calendars\"\n",
"[ERR:3] \"arc particle\" -> \"air particles\"\n",
"[OK] \"formats updates\" -> \"formats updates\"\n",
"[OK] \"mother smashes\" -> \"mother smashes\"\n",
"[OK] \"ventilations\" -> \"ventilations\"\n",
"[OK] \"carbon\" -> \"carbon\"\n",
"[OK] \"odor endeavor\" -> \"odor endeavor\"\n",
"[OK] \"focus injuries\" -> \"focus injuries\"\n",
"[OK] \"drill\" -> \"drill\"\n",
"[ERR:4] \"nothing\" -> \"north\"\n",
"[OK] \"chalks ideas\" -> \"chalks ideas\"\n",
"[OK] \"decoders\" -> \"decoders\"\n",
"[OK] \"keys\" -> \"keys\"\n",
"[OK] \"buffer arches\" -> \"buffer arches\"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ERR:4] \"splitter skies\" -> \"splicer sails\"\n",
"[OK] \"adherence breezes\" -> \"adherence breezes\"\n",
"[OK] \"clips\" -> \"clips\"\n",
"[OK] \"alcohols\" -> \"alcohols\"\n",
"[OK] \"discussions\" -> \"discussions\"\n",
"[OK] \"operators\" -> \"operators\"\n",
"[OK] \"rebound shades\" -> \"rebound shades\"\n",
"[OK] \"barometer\" -> \"barometer\"\n",
"[OK] \"qualification mounts\" -> \"qualification mounts\"\n",
"[OK] \"transistors captain\" -> \"transistors captain\"\n",
"[OK] \"rolls alloy\" -> \"rolls alloy\"\n",
"[OK] \"partitions\" -> \"partitions\"\n",
"[OK] \"vendors\" -> \"vendors\"\n",
"[OK] \"prisoner floor\" -> \"prisoner floor\"\n",
"[OK] \"supplies\" -> \"supplies\"\n",
"[OK] \"rap\" -> \"rap\"\n",
"[OK] \"ground meetings\" -> \"ground meetings\"\n",
"[OK] \"paints sequences\" -> \"paints sequences\"\n",
"[ERR:2] \"descriptions sewers\" -> \"descriptions levers\"\n",
"[OK] \"flake pads\" -> \"flake pads\"\n",
"[OK] \"texts\" -> \"texts\"\n",
"[OK] \"envelope residue\" -> \"envelope residue\"\n",
"[OK] \"drift\" -> \"drift\"\n",
"[OK] \"officer\" -> \"officer\"\n",
"[OK] \"resistances\" -> \"resistances\"\n",
"[OK] \"buzzer\" -> \"buzzer\"\n",
"[OK] \"interviewers hauls\" -> \"interviewers hauls\"\n",
"[OK] \"lick\" -> \"lick\"\n",
"[OK] \"investments\" -> \"investments\"\n",
"[OK] \"date temperatures\" -> \"date temperatures\"\n",
"[OK] \"plug exchangers\" -> \"plug exchangers\"\n",
"[OK] \"tear responsibilities\" -> \"tear responsibilities\"\n",
"[OK] \"authority\" -> \"authority\"\n",
"[OK] \"kits tar\" -> \"kits tar\"\n",
"[OK] \"cracks\" -> \"cracks\"\n",
"[OK] \"nails ride\" -> \"nails ride\"\n",
"[OK] \"armful\" -> \"armful\"\n",
"[OK] \"advancement\" -> \"advancement\"\n",
"[OK] \"rakes\" -> \"rakes\"\n",
"[OK] \"transmittal\" -> \"transmittal\"\n",
"[OK] \"runways dependencies\" -> \"runways dependencies\"\n",
"[OK] \"town\" -> \"town\"\n",
"[OK] \"pushup\" -> \"pushup\"\n",
"[OK] \"bears\" -> \"bears\"\n",
"[OK] \"temperatures\" -> \"temperatures\"\n",
"[OK] \"editor\" -> \"editor\"\n",
"[ERR:3] \"passage intelligences\" -> \"passage inlelgences\"\n",
"[OK] \"body checkout\" -> \"body checkout\"\n",
"[OK] \"cars\" -> \"cars\"\n",
"[OK] \"analyzer turns\" -> \"analyzer turns\"\n",
"[ERR:2] \"source need\" -> \"source bed\"\n",
"[OK] \"washtubs slings\" -> \"washtubs slings\"\n",
"[OK] \"craft\" -> \"craft\"\n",
"[OK] \"atmospheres\" -> \"atmospheres\"\n",
"[ERR:4] \"binoculars broadcasts\" -> \"binoculars breasts\"\n",
"[ERR:2] \"certificate minimum\" -> \"certificate maximum\"\n",
"[OK] \"raps\" -> \"raps\"\n",
"[OK] \"horn punishment\" -> \"horn punishment\"\n",
"[OK] \"sort\" -> \"sort\"\n",
"[OK] \"verb\" -> \"verb\"\n",
"[OK] \"advertisements partition\" -> \"advertisements partition\"\n",
"[OK] \"complaints\" -> \"complaints\"\n",
"[OK] \"armament\" -> \"armament\"\n",
"[OK] \"rockets advance\" -> \"rockets advance\"\n",
"[OK] \"ampere\" -> \"ampere\"\n",
"[OK] \"version guidelines\" -> \"version guidelines\"\n",
"[OK] \"groans inlets\" -> \"groans inlets\"\n",
"[OK] \"touches\" -> \"touches\"\n",
"[OK] \"waterline produce\" -> \"waterline produce\"\n",
"[OK] \"shoulders\" -> \"shoulders\"\n",
"[OK] \"mop\" -> \"mop\"\n",
"[OK] \"wonder\" -> \"wonder\"\n",
"[OK] \"concentrations\" -> \"concentrations\"\n",
"[ERR:5] \"profiles\" -> \"route\"\n",
"[OK] \"bulkhead\" -> \"bulkhead\"\n",
"[OK] \"cones\" -> \"cones\"\n",
"[OK] \"chests\" -> \"chests\"\n",
"[OK] \"sprays soldiers\" -> \"sprays soldiers\"\n",
"[OK] \"clouds interfaces\" -> \"clouds interfaces\"\n",
"[ERR:1] \"discontinuances\" -> \"discontinuance\"\n",
"[ERR:1] \"symptom locomotive\" -> \"symptom locomotives\"\n",
"[OK] \"pyramid\" -> \"pyramid\"\n",
"[ERR:4] \"transformer calibration\" -> \"transformer abrasion\"\n",
"[OK] \"plating retractors\" -> \"plating retractors\"\n",
"[OK] \"awards pupils\" -> \"awards pupils\"\n",
"[OK] \"trade crewmembers\" -> \"trade crewmembers\"\n",
"[OK] \"watch\" -> \"watch\"\n",
"[OK] \"loop\" -> \"loop\"\n",
"[OK] \"displays offenders\" -> \"displays offenders\"\n",
"[ERR:3] \"milestones\" -> \"milestcs\"\n",
"[OK] \"squares rinse\" -> \"squares rinse\"\n",
"[OK] \"insanities audits\" -> \"insanities audits\"\n",
"[OK] \"cell journals\" -> \"cell journals\"\n",
"[OK] \"tastes\" -> \"tastes\"\n",
"[OK] \"wills discriminations\" -> \"wills discriminations\"\n",
"[OK] \"governors morale\" -> \"governors morale\"\n",
"[OK] \"retractor\" -> \"retractor\"\n",
"[OK] \"swimmers swords\" -> \"swimmers swords\"\n",
"[OK] \"snaps eves\" -> \"snaps eves\"\n",
"[OK] \"adaptions\" -> \"adaptions\"\n",
"[OK] \"divisions\" -> \"divisions\"\n",
"[OK] \"snow accomplishment\" -> \"snow accomplishment\"\n",
"[OK] \"carbon\" -> \"carbon\"\n",
"[OK] \"claps cards\" -> \"claps cards\"\n",
"[ERR:1] \"submarines lifeboats\" -> \"submarines lifeboat\"\n",
"[OK] \"towels\" -> \"towels\"\n",
"[OK] \"keywords\" -> \"keywords\"\n",
"[OK] \"swimmer towel\" -> \"swimmer towel\"\n",
"[OK] \"couples stones\" -> \"couples stones\"\n",
"[OK] \"reports\" -> \"reports\"\n",
"[OK] \"situation tape\" -> \"situation tape\"\n",
"[OK] \"daybreak misfits\" -> \"daybreak misfits\"\n",
"[OK] \"jugs\" -> \"jugs\"\n",
"[OK] \"physics\" -> \"physics\"\n",
"[OK] \"daughter\" -> \"daughter\"\n",
"[ERR:6] \"fleets echelons\" -> \"fleets chief\"\n",
"[OK] \"conflict\" -> \"conflict\"\n",
"[OK] \"strikes\" -> \"strikes\"\n",
"[OK] \"careers\" -> \"careers\"\n",
"[OK] \"jumpers adjective\" -> \"jumpers adjective\"\n",
"[ERR:5] \"aptitudes sewage\" -> \"aptitudes kettles\"\n",
"[OK] \"wagon\" -> \"wagon\"\n",
"[ERR:2] \"weld fields\" -> \"belt fields\"\n",
"[OK] \"record\" -> \"record\"\n",
"[OK] \"signalmen ally\" -> \"signalmen ally\"\n",
"[OK] \"pastes\" -> \"pastes\"\n",
"[OK] \"season hubs\" -> \"season hubs\"\n",
"[OK] \"expenditure\" -> \"expenditure\"\n",
"[OK] \"adjectives\" -> \"adjectives\"\n",
"[OK] \"arrays\" -> \"arrays\"\n",
"[OK] \"tenth eddies\" -> \"tenth eddies\"\n",
"[OK] \"guidelines contrast\" -> \"guidelines contrast\"\n",
"[OK] \"eleven roller\" -> \"eleven roller\"\n",
"[OK] \"apron\" -> \"apron\"\n",
"[OK] \"operation colleges\" -> \"operation colleges\"\n",
"[OK] \"captures pressures\" -> \"captures pressures\"\n",
"[OK] \"suspect\" -> \"suspect\"\n",
"[ERR:2] \"blocks molecules\" -> \"backs molecules\"\n",
"[OK] \"starboard railroad\" -> \"starboard railroad\"\n",
"[OK] \"docks\" -> \"docks\"\n",
"[OK] \"sirs\" -> \"sirs\"\n",
"[OK] \"path\" -> \"path\"\n",
"[OK] \"cage drums\" -> \"cage drums\"\n",
"[OK] \"accountabilities piles\" -> \"accountabilities piles\"\n",
"[OK] \"battery mule\" -> \"battery mule\"\n",
"[ERR:2] \"transistors processors\" -> \"transistors processes\"\n",
"[OK] \"doubt\" -> \"doubt\"\n",
"[OK] \"island interpreters\" -> \"island interpreters\"\n",
"[ERR:5] \"position variation\" -> \"portion ration\"\n",
"[OK] \"twists extension\" -> \"twists extension\"\n",
"[OK] \"image numerals\" -> \"image numerals\"\n",
"[OK] \"gates asterisks\" -> \"gates asterisks\"\n",
"[ERR:2] \"signal\" -> \"sign\"\n",
"[OK] \"buffer\" -> \"buffer\"\n",
"[ERR:3] \"batteries dynamics\" -> \"batteries dynaien\"\n",
"[OK] \"deviation\" -> \"deviation\"\n",
"[OK] \"sir servant\" -> \"sir servant\"\n",
"[OK] \"admissions curl\" -> \"admissions curl\"\n",
"[OK] \"worm hardship\" -> \"worm hardship\"\n",
"[ERR:3] \"supervision lettering\" -> \"supervision lterins\"\n",
"[OK] \"eliminator inlet\" -> \"eliminator inlet\"\n",
"[OK] \"conjunction\" -> \"conjunction\"\n",
"[OK] \"endeavors\" -> \"endeavors\"\n",
"[OK] \"squadron\" -> \"squadron\"\n",
"[OK] \"lenders breads\" -> \"lenders breads\"\n",
"[OK] \"activities schoolhouses\" -> \"activities schoolhouses\"\n",
"[OK] \"advance felt\" -> \"advance felt\"\n",
"[OK] \"waterlines\" -> \"waterlines\"\n",
"[OK] \"clips\" -> \"clips\"\n",
"[OK] \"inceptions\" -> \"inceptions\"\n",
"[OK] \"supplies\" -> \"supplies\"\n",
"[OK] \"statements\" -> \"statements\"\n",
"[OK] \"closure parks\" -> \"closure parks\"\n",
"[OK] \"liquors\" -> \"liquors\"\n",
"[OK] \"deductions influence\" -> \"deductions influence\"\n",
"[OK] \"agents\" -> \"agents\"\n",
"[OK] \"boost\" -> \"boost\"\n",
"[OK] \"passbooks\" -> \"passbooks\"\n",
"[OK] \"hooks missiles\" -> \"hooks missiles\"\n",
"[OK] \"clearances\" -> \"clearances\"\n",
"[OK] \"discrepancies locomotives\" -> \"discrepancies locomotives\"\n",
"[ERR:4] \"hotels scores\" -> \"hotels forests\"\n",
"[OK] \"dock container\" -> \"dock container\"\n",
"[ERR:4] \"visibilities heaps\" -> \"vicinities heaps\"\n",
"[OK] \"sequences\" -> \"sequences\"\n",
"[OK] \"canals\" -> \"canals\"\n",
"[OK] \"try survivals\" -> \"try survivals\"\n",
"[ERR:1] \"gyros mornings\" -> \"gyros morning\"\n",
"[ERR:4] \"concentrations outfit\" -> \"concentrations routes\"\n",
"[OK] \"heads adhesives\" -> \"heads adhesives\"\n",
"[OK] \"mentions\" -> \"mentions\"\n",
"[OK] \"circumferences\" -> \"circumferences\"\n",
"[OK] \"escapes techniques\" -> \"escapes techniques\"\n",
"[OK] \"interchanges cracks\" -> \"interchanges cracks\"\n",
"[OK] \"islands vice\" -> \"islands vice\"\n",
"[ERR:3] \"symptom classes\" -> \"symptom case\"\n",
"[OK] \"monitors\" -> \"monitors\"\n",
"[OK] \"warranties\" -> \"warranties\"\n",
"[OK] \"calibers\" -> \"calibers\"\n",
"[OK] \"night\" -> \"night\"\n",
"[OK] \"probabilities\" -> \"probabilities\"\n",
"[OK] \"appraisals\" -> \"appraisals\"\n",
"[OK] \"dive\" -> \"dive\"\n",
"[OK] \"bypass\" -> \"bypass\"\n",
"[OK] \"street\" -> \"street\"\n",
"[OK] \"hauls manager\" -> \"hauls manager\"\n",
"[OK] \"pull specialty\" -> \"pull specialty\"\n",
"[OK] \"sacks nut\" -> \"sacks nut\"\n",
"[OK] \"bushel\" -> \"bushel\"\n",
"[OK] \"scheduler\" -> \"scheduler\"\n",
"[OK] \"executions educators\" -> \"executions educators\"\n",
"[OK] \"thursday\" -> \"thursday\"\n",
"[OK] \"menu\" -> \"menu\"\n",
"[OK] \"frigate fogs\" -> \"frigate fogs\"\n",
"[OK] \"recording\" -> \"recording\"\n",
"[OK] \"bricks wheel\" -> \"bricks wheel\"\n",
"[OK] \"reproduction pair\" -> \"reproduction pair\"\n",
"[OK] \"roll\" -> \"roll\"\n",
"[OK] \"fields\" -> \"fields\"\n",
"[OK] \"thimbles bowls\" -> \"thimbles bowls\"\n",
"[OK] \"story\" -> \"story\"\n",
"[OK] \"responsibilities\" -> \"responsibilities\"\n",
"[OK] \"transformer bones\" -> \"transformer bones\"\n",
"[OK] \"relay\" -> \"relay\"\n",
"[OK] \"swallows\" -> \"swallows\"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[OK] \"stream\" -> \"stream\"\n",
"[OK] \"polishes\" -> \"polishes\"\n",
"[OK] \"roots electrons\" -> \"roots electrons\"\n",
"[OK] \"hut\" -> \"hut\"\n",
"[OK] \"insulation\" -> \"insulation\"\n",
"[OK] \"rug till\" -> \"rug till\"\n",
"[OK] \"rod\" -> \"rod\"\n",
"[ERR:1] \"semiconductor soles\" -> \"semiconductors soles\"\n",
"[OK] \"chalks battles\" -> \"chalks battles\"\n",
"[OK] \"formation tablets\" -> \"formation tablets\"\n",
"[OK] \"nickel executions\" -> \"nickel executions\"\n",
"[ERR:7] \"itineraries couple\" -> \"itineraries\"\n",
"[OK] \"basis\" -> \"basis\"\n",
"[OK] \"headquarters integer\" -> \"headquarters integer\"\n",
"[OK] \"hit tens\" -> \"hit tens\"\n",
"[OK] \"ratios shipment\" -> \"ratios shipment\"\n",
"[OK] \"columns affair\" -> \"columns affair\"\n",
"[OK] \"filters\" -> \"filters\"\n",
"[OK] \"reductions\" -> \"reductions\"\n",
"[OK] \"autos\" -> \"autos\"\n",
"[OK] \"casts\" -> \"casts\"\n",
"[OK] \"oar\" -> \"oar\"\n",
"[ERR:3] \"affiant carelessness\" -> \"affiant caresness\"\n",
"[OK] \"rockets\" -> \"rockets\"\n",
"[OK] \"tills slave\" -> \"tills slave\"\n",
"[OK] \"knots\" -> \"knots\"\n",
"[OK] \"locks\" -> \"locks\"\n",
"[OK] \"symptoms lifetime\" -> \"symptoms lifetime\"\n",
"[OK] \"organizations\" -> \"organizations\"\n",
"[OK] \"makes surveyors\" -> \"makes surveyors\"\n",
"[OK] \"chills\" -> \"chills\"\n",
"[OK] \"discrepancies\" -> \"discrepancies\"\n",
"[OK] \"metals\" -> \"metals\"\n",
"[OK] \"allocation spacers\" -> \"allocation spacers\"\n",
"[OK] \"failures\" -> \"failures\"\n",
"[OK] \"case formulas\" -> \"case formulas\"\n",
"[OK] \"destinations suits\" -> \"destinations suits\"\n",
"[OK] \"uncertainty election\" -> \"uncertainty election\"\n",
"[OK] \"speech errors\" -> \"speech errors\"\n",
"[OK] \"thought\" -> \"thought\"\n",
"[ERR:4] \"troubleshooter sword\" -> \"troubleshooters war\"\n",
"[OK] \"cars\" -> \"cars\"\n",
"[OK] \"variety\" -> \"variety\"\n",
"[OK] \"primitives realinements\" -> \"primitives realinements\"\n",
"[OK] \"screwdriver\" -> \"screwdriver\"\n",
"[OK] \"depots\" -> \"depots\"\n",
"[OK] \"frigates misleads\" -> \"frigates misleads\"\n",
"[OK] \"porters\" -> \"porters\"\n",
"[OK] \"wingnut\" -> \"wingnut\"\n",
"[OK] \"fake sidewalk\" -> \"fake sidewalk\"\n",
"[OK] \"nomenclatures\" -> \"nomenclatures\"\n",
"[OK] \"voices\" -> \"voices\"\n",
"[OK] \"tool conspiracies\" -> \"tool conspiracies\"\n",
"[OK] \"calculators journey\" -> \"calculators journey\"\n",
"[OK] \"difficulty impedance\" -> \"difficulty impedance\"\n",
"[OK] \"secretaries\" -> \"secretaries\"\n",
"[OK] \"hardness\" -> \"hardness\"\n",
"[OK] \"fuels\" -> \"fuels\"\n",
"[ERR:2] \"bytes honk\" -> \"bytes cork\"\n",
"[ERR:1] \"farm stream\" -> \"farms stream\"\n",
"[ERR:1] \"certification\" -> \"certifications\"\n",
"[OK] \"recruiter\" -> \"recruiter\"\n",
"[OK] \"daughter\" -> \"daughter\"\n",
"[OK] \"tons\" -> \"tons\"\n",
"[OK] \"rack helicopters\" -> \"rack helicopters\"\n",
"[OK] \"dam\" -> \"dam\"\n",
"[OK] \"alarm bunk\" -> \"alarm bunk\"\n",
"[OK] \"departments\" -> \"departments\"\n",
"[OK] \"helmet berries\" -> \"helmet berries\"\n",
"[ERR:3] \"rating\" -> \"being\"\n",
"[OK] \"possessions satellite\" -> \"possessions satellite\"\n",
"[OK] \"adherences\" -> \"adherences\"\n",
"[OK] \"cushions\" -> \"cushions\"\n",
"[ERR:1] \"course presentation\" -> \"courses presentation\"\n",
"[OK] \"sponge desertions\" -> \"sponge desertions\"\n",
"Batch: 3 / 8\n",
"Ground truth -> Recognized\n",
"[OK] \"crowd alcohols\" -> \"crowd alcohols\"\n",
"[ERR:2] \"sticks spoon\" -> \"sticks spot\"\n",
"[OK] \"correspondence\" -> \"correspondence\"\n",
"[OK] \"carbons\" -> \"carbons\"\n",
"[OK] \"vapors spray\" -> \"vapors spray\"\n",
"[OK] \"grease\" -> \"grease\"\n",
"[OK] \"assistant rowboats\" -> \"assistant rowboats\"\n",
"[OK] \"collars\" -> \"collars\"\n",
"[OK] \"cements\" -> \"cements\"\n",
"[OK] \"pile\" -> \"pile\"\n",
"[OK] \"modules antennas\" -> \"modules antennas\"\n",
"[OK] \"infections ball\" -> \"infections ball\"\n",
"[OK] \"requisition address\" -> \"requisition address\"\n",
"[OK] \"chief access\" -> \"chief access\"\n",
"[OK] \"components\" -> \"components\"\n",
"[OK] \"blowers cape\" -> \"blowers cape\"\n",
"[OK] \"passivations spans\" -> \"passivations spans\"\n",
"[OK] \"scale mixes\" -> \"scale mixes\"\n",
"[OK] \"authorization\" -> \"authorization\"\n",
"[OK] \"deductions facilitation\" -> \"deductions facilitation\"\n",
"[OK] \"conjunction beings\" -> \"conjunction beings\"\n",
"[OK] \"bombs\" -> \"bombs\"\n",
"[OK] \"volt\" -> \"volt\"\n",
"[OK] \"clubs spokes\" -> \"clubs spokes\"\n",
"[OK] \"cuffs\" -> \"cuffs\"\n",
"[OK] \"press flake\" -> \"press flake\"\n",
"[OK] \"decrements\" -> \"decrements\"\n",
"[OK] \"visions\" -> \"visions\"\n",
"[OK] \"yolk\" -> \"yolk\"\n",
"[OK] \"governors\" -> \"governors\"\n",
"[OK] \"warnings bell\" -> \"warnings bell\"\n",
"[ERR:1] \"credibility runaways\" -> \"credibility runways\"\n",
"[OK] \"distributors\" -> \"distributors\"\n",
"[OK] \"aim jeopardy\" -> \"aim jeopardy\"\n",
"[OK] \"discretion\" -> \"discretion\"\n",
"[OK] \"mill passengers\" -> \"mill passengers\"\n",
"[OK] \"densities\" -> \"densities\"\n",
"[ERR:1] \"wonders\" -> \"wonder\"\n",
"[OK] \"puffs\" -> \"puffs\"\n",
"[OK] \"curtain chests\" -> \"curtain chests\"\n",
"[OK] \"powers coal\" -> \"powers coal\"\n",
"[ERR:4] \"sonars\" -> \"conn\"\n",
"[OK] \"suits salt\" -> \"suits salt\"\n",
"[OK] \"share\" -> \"share\"\n",
"[ERR:1] \"straighteners\" -> \"straightener\"\n",
"[OK] \"brackets\" -> \"brackets\"\n",
"[ERR:4] \"arguments plots\" -> \"arguments males\"\n",
"[OK] \"tactic\" -> \"tactic\"\n",
"[OK] \"principals\" -> \"principals\"\n",
"[OK] \"bottoms preparation\" -> \"bottoms preparation\"\n",
"[OK] \"gunfire replacements\" -> \"gunfire replacements\"\n",
"[OK] \"counter\" -> \"counter\"\n",
"[OK] \"thing languages\" -> \"thing languages\"\n",
"[OK] \"lakes transport\" -> \"lakes transport\"\n",
"[OK] \"gaskets sevenths\" -> \"gaskets sevenths\"\n",
"[ERR:1] \"moisture requirements\" -> \"moisture requirement\"\n",
"[OK] \"stabilization\" -> \"stabilization\"\n",
"[OK] \"guard\" -> \"guard\"\n",
"[OK] \"cheek\" -> \"cheek\"\n",
"[OK] \"inquiry\" -> \"inquiry\"\n",
"[OK] \"purge twirl\" -> \"purge twirl\"\n",
"[ERR:1] \"ores stoppers\" -> \"cores stoppers\"\n",
"[OK] \"delivery\" -> \"delivery\"\n",
"[OK] \"duplicate\" -> \"duplicate\"\n",
"[OK] \"desks doorstep\" -> \"desks doorstep\"\n",
"[ERR:4] \"rubbish diagnostics\" -> \"cubes diagnostics\"\n",
"[OK] \"wings\" -> \"wings\"\n",
"[OK] \"curvature reaction\" -> \"curvature reaction\"\n",
"[OK] \"longitude\" -> \"longitude\"\n",
"[OK] \"contrasts songs\" -> \"contrasts songs\"\n",
"[OK] \"asterisks column\" -> \"asterisks column\"\n",
"[OK] \"tenth\" -> \"tenth\"\n",
"[OK] \"indicator cliff\" -> \"indicator cliff\"\n",
"[OK] \"patter\" -> \"patter\"\n",
"[OK] \"diodes\" -> \"diodes\"\n",
"[OK] \"account\" -> \"account\"\n",
"[OK] \"families semaphore\" -> \"families semaphore\"\n",
"[OK] \"builders\" -> \"builders\"\n",
"[OK] \"update wear\" -> \"update wear\"\n",
"[OK] \"cabs\" -> \"cabs\"\n",
"[OK] \"presents\" -> \"presents\"\n",
"[OK] \"shaft\" -> \"shaft\"\n",
"[OK] \"thickness\" -> \"thickness\"\n",
"[OK] \"volumes\" -> \"volumes\"\n",
"[OK] \"registers\" -> \"registers\"\n",
"[OK] \"sectors\" -> \"sectors\"\n",
"[OK] \"condensers trip\" -> \"condensers trip\"\n",
"[ERR:4] \"drags usages\" -> \"drags arcs\"\n",
"[OK] \"messenger coordinations\" -> \"messenger coordinations\"\n",
"[ERR:7] \"managers source\" -> \"dangers setups\"\n",
"[OK] \"bags target\" -> \"bags target\"\n",
"[OK] \"means corks\" -> \"means corks\"\n",
"[OK] \"spars image\" -> \"spars image\"\n",
"[OK] \"habit concepts\" -> \"habit concepts\"\n",
"[ERR:1] \"helicopters pools\" -> \"helicopters pool\"\n",
"[ERR:6] \"calendars arrangement\" -> \"calendars orange\"\n",
"[OK] \"hotel\" -> \"hotel\"\n",
"[OK] \"cement stick\" -> \"cement stick\"\n",
"[OK] \"focus\" -> \"focus\"\n",
"[OK] \"extension\" -> \"extension\"\n",
"[ERR:2] \"link tilling\" -> \"bin tilling\"\n",
"[OK] \"carloads\" -> \"carloads\"\n",
"[OK] \"installations eliminator\" -> \"installations eliminator\"\n",
"[OK] \"abusers\" -> \"abusers\"\n",
"[OK] \"alphabets tails\" -> \"alphabets tails\"\n",
"[OK] \"numerals\" -> \"numerals\"\n",
"[OK] \"annex ingredient\" -> \"annex ingredient\"\n",
"[OK] \"lead\" -> \"lead\"\n",
"[OK] \"replacement\" -> \"replacement\"\n",
"[OK] \"clamp compromise\" -> \"clamp compromise\"\n",
"[OK] \"trousers\" -> \"trousers\"\n",
"[OK] \"calibers\" -> \"calibers\"\n",
"[OK] \"propeller\" -> \"propeller\"\n",
"[OK] \"orifices chases\" -> \"orifices chases\"\n",
"[OK] \"tolerances privates\" -> \"tolerances privates\"\n",
"[OK] \"tracks fixture\" -> \"tracks fixture\"\n",
"[OK] \"displays\" -> \"displays\"\n",
"[OK] \"stripe\" -> \"stripe\"\n",
"[OK] \"exceptions\" -> \"exceptions\"\n",
"[OK] \"misfits\" -> \"misfits\"\n",
"[ERR:3] \"nomenclature metal\" -> \"nomenclature meters\"\n",
"[ERR:3] \"elapse sleds\" -> \"elapses beds\"\n",
"[OK] \"shoulder\" -> \"shoulder\"\n",
"[OK] \"tissues\" -> \"tissues\"\n",
"[OK] \"stations\" -> \"stations\"\n",
"[ERR:1] \"requisitions moss\" -> \"requisitions mass\"\n",
"[OK] \"bunks\" -> \"bunks\"\n",
"[OK] \"hotels\" -> \"hotels\"\n",
"[ERR:1] \"origins dope\" -> \"origins dopes\"\n",
"[OK] \"grooms\" -> \"grooms\"\n",
"[OK] \"outlet coin\" -> \"outlet coin\"\n",
"[OK] \"monday\" -> \"monday\"\n",
"[OK] \"keyboards publications\" -> \"keyboards publications\"\n",
"[OK] \"drainer song\" -> \"drainer song\"\n",
"[OK] \"routine\" -> \"routine\"\n",
"[OK] \"uniforms filler\" -> \"uniforms filler\"\n",
"[OK] \"lime cliff\" -> \"lime cliff\"\n",
"[OK] \"dockings\" -> \"dockings\"\n",
"[OK] \"presentations\" -> \"presentations\"\n",
"[OK] \"polarities\" -> \"polarities\"\n",
"[OK] \"beings recombinations\" -> \"beings recombinations\"\n",
"[OK] \"loaves twirl\" -> \"loaves twirl\"\n",
"[OK] \"rates\" -> \"rates\"\n",
"[OK] \"chapters\" -> \"chapters\"\n",
"[OK] \"vomit responses\" -> \"vomit responses\"\n",
"[OK] \"feelings\" -> \"feelings\"\n",
"[ERR:1] \"turnarounds\" -> \"turnaround\"\n",
"[OK] \"hunt paygrades\" -> \"hunt paygrades\"\n",
"[OK] \"subject thicknesses\" -> \"subject thicknesses\"\n",
"[OK] \"purchases\" -> \"purchases\"\n",
"[OK] \"counsels bytes\" -> \"counsels bytes\"\n",
"[OK] \"traffic output\" -> \"traffic output\"\n",
"[OK] \"boat\" -> \"boat\"\n",
"[OK] \"quality patter\" -> \"quality patter\"\n",
"[OK] \"capital\" -> \"capital\"\n",
"[OK] \"units\" -> \"units\"\n",
"[ERR:5] \"branches curve\" -> \"branches beams\"\n",
"[OK] \"paste\" -> \"paste\"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[OK] \"stare\" -> \"stare\"\n",
"[ERR:3] \"spools dish\" -> \"spools date\"\n",
"[OK] \"roof\" -> \"roof\"\n",
"[OK] \"tan traffic\" -> \"tan traffic\"\n",
"[ERR:14] \"synthetics ticket\" -> \"try sfhoskor\"\n",
"[OK] \"assistants\" -> \"assistants\"\n",
"[OK] \"weights settlement\" -> \"weights settlement\"\n",
"[OK] \"core\" -> \"core\"\n",
"[OK] \"dab\" -> \"dab\"\n",
"[OK] \"subjects\" -> \"subjects\"\n",
"[OK] \"freight\" -> \"freight\"\n",
"[OK] \"grooves workmen\" -> \"grooves workmen\"\n",
"[OK] \"voucher\" -> \"voucher\"\n",
"[OK] \"gate loudspeaker\" -> \"gate loudspeaker\"\n",
"[OK] \"density shirts\" -> \"density shirts\"\n",
"[OK] \"cubes jar\" -> \"cubes jar\"\n",
"[OK] \"hilltops\" -> \"hilltops\"\n",
"[OK] \"precaution\" -> \"precaution\"\n",
"[OK] \"limitations valves\" -> \"limitations valves\"\n",
"[OK] \"disasters\" -> \"disasters\"\n",
"[OK] \"heats\" -> \"heats\"\n",
"[OK] \"rewards hashmarks\" -> \"rewards hashmarks\"\n",
"[OK] \"theories deposition\" -> \"theories deposition\"\n",
"[ERR:6] \"supervisors representatives\" -> \"supervisors resenatios\"\n",
"[OK] \"fact protection\" -> \"fact protection\"\n",
"[OK] \"documentation\" -> \"documentation\"\n",
"[OK] \"fillers cycles\" -> \"fillers cycles\"\n",
"[OK] \"heats cure\" -> \"heats cure\"\n",
"[OK] \"thoughts\" -> \"thoughts\"\n",
"[OK] \"pound\" -> \"pound\"\n",
"[ERR:3] \"communities\" -> \"communting\"\n",
"[ERR:1] \"jars ranks\" -> \"bars ranks\"\n",
"[OK] \"gyroscopes gyros\" -> \"gyroscopes gyros\"\n",
"[OK] \"lens\" -> \"lens\"\n",
"[OK] \"options\" -> \"options\"\n",
"[OK] \"harnesses\" -> \"harnesses\"\n",
"[OK] \"jacket\" -> \"jacket\"\n",
"[ERR:9] \"amplifiers specialist\" -> \"omliers cpocilits\"\n",
"[OK] \"hickories bowls\" -> \"hickories bowls\"\n",
"[OK] \"lumps cake\" -> \"lumps cake\"\n",
"[OK] \"injector\" -> \"injector\"\n",
"[OK] \"crewmembers\" -> \"crewmembers\"\n",
"[OK] \"analogs complaint\" -> \"analogs complaint\"\n",
"[OK] \"school equipment\" -> \"school equipment\"\n",
"[OK] \"events\" -> \"events\"\n",
"[OK] \"meet\" -> \"meet\"\n",
"[OK] \"lender night\" -> \"lender night\"\n",
"[OK] \"chits core\" -> \"chits core\"\n",
"[OK] \"removals print\" -> \"removals print\"\n",
"[OK] \"mouth cruise\" -> \"mouth cruise\"\n",
"[OK] \"focus\" -> \"focus\"\n",
"[OK] \"keyword homes\" -> \"keyword homes\"\n",
"[OK] \"leak document\" -> \"leak document\"\n",
"[OK] \"bank bubbles\" -> \"bank bubbles\"\n",
"[OK] \"chit jeopardies\" -> \"chit jeopardies\"\n",
"[OK] \"algebra satellites\" -> \"algebra satellites\"\n",
"[OK] \"stress\" -> \"stress\"\n",
"[OK] \"coordinates televisions\" -> \"coordinates televisions\"\n",
"[OK] \"evaluation\" -> \"evaluation\"\n",
"[ERR:9] \"restaurant giants\" -> \"rtspats hints\"\n",
"[OK] \"torque\" -> \"torque\"\n",
"[OK] \"correspondence\" -> \"correspondence\"\n",
"[OK] \"crusts mercury\" -> \"crusts mercury\"\n",
"[OK] \"text\" -> \"text\"\n",
"[OK] \"application flash\" -> \"application flash\"\n",
"[OK] \"centerline\" -> \"centerline\"\n",
"[OK] \"comments\" -> \"comments\"\n",
"[OK] \"actions sites\" -> \"actions sites\"\n",
"[OK] \"candle\" -> \"candle\"\n",
"[OK] \"dates relationship\" -> \"dates relationship\"\n",
"[OK] \"car\" -> \"car\"\n",
"[OK] \"college\" -> \"college\"\n",
"[OK] \"whirl\" -> \"whirl\"\n",
"[ERR:2] \"mops rehabilitation\" -> \"hoops rehabilitation\"\n",
"[OK] \"bin deposits\" -> \"bin deposits\"\n",
"[ERR:1] \"tubes cruises\" -> \"tubes cruise\"\n",
"[OK] \"desert passes\" -> \"desert passes\"\n",
"[OK] \"legend camera\" -> \"legend camera\"\n",
"[OK] \"streaks\" -> \"streaks\"\n",
"[OK] \"polisher\" -> \"polisher\"\n",
"[ERR:2] \"subordinate skill\" -> \"subordinatesill\"\n",
"[OK] \"decisions display\" -> \"decisions display\"\n",
"[OK] \"discount introduction\" -> \"discount introduction\"\n",
"[OK] \"nights\" -> \"nights\"\n",
"[OK] \"settings\" -> \"settings\"\n",
"[OK] \"interference\" -> \"interference\"\n",
"[OK] \"magnesium modules\" -> \"magnesium modules\"\n",
"[OK] \"housings\" -> \"housings\"\n",
"[OK] \"tabulation\" -> \"tabulation\"\n",
"[OK] \"meridian\" -> \"meridian\"\n",
"[OK] \"vol.\" -> \"vol.\"\n",
"[OK] \"custom\" -> \"custom\"\n",
"[OK] \"holddown\" -> \"holddown\"\n",
"[OK] \"giant isolation\" -> \"giant isolation\"\n",
"[OK] \"breaks\" -> \"breaks\"\n",
"[OK] \"control\" -> \"control\"\n",
"[OK] \"ejection\" -> \"ejection\"\n",
"[OK] \"flash\" -> \"flash\"\n",
"[OK] \"greenwich frosts\" -> \"greenwich frosts\"\n",
"[ERR:4] \"union automobile\" -> \"union automoes\"\n",
"[OK] \"negligence contribution\" -> \"negligence contribution\"\n",
"[ERR:3] \"washes\" -> \"wuschs\"\n",
"[ERR:6] \"adjective\" -> \"phipectin\"\n",
"[ERR:4] \"organizations exchange\" -> \"organizations sechae\"\n",
"[OK] \"fines\" -> \"fines\"\n",
"[OK] \"property\" -> \"property\"\n",
"[OK] \"sprayers toolboxes\" -> \"sprayers toolboxes\"\n",
"[OK] \"transmitters\" -> \"transmitters\"\n",
"[OK] \"friction raises\" -> \"friction raises\"\n",
"[OK] \"apprehension jets\" -> \"apprehension jets\"\n",
"[OK] \"sonars picks\" -> \"sonars picks\"\n",
"[OK] \"confession forecast\" -> \"confession forecast\"\n",
"[OK] \"separation\" -> \"separation\"\n",
"[OK] \"pot\" -> \"pot\"\n",
"[OK] \"wonder detention\" -> \"wonder detention\"\n",
"[OK] \"encounter\" -> \"encounter\"\n",
"[OK] \"caution\" -> \"caution\"\n",
"[OK] \"swallows advisers\" -> \"swallows advisers\"\n",
"[OK] \"span steam\" -> \"span steam\"\n",
"[ERR:5] \"demonstration rattle\" -> \"demonstrations trails\"\n",
"[OK] \"railroads observation\" -> \"railroads observation\"\n",
"[ERR:1] \"harmony exits\" -> \"harmony exit\"\n",
"[OK] \"sexes\" -> \"sexes\"\n",
"[ERR:3] \"mast veteran\" -> \"mast meter\"\n",
"[ERR:5] \"documentation dyes\" -> \"documentation\"\n",
"[OK] \"taste\" -> \"taste\"\n",
"[OK] \"architecture\" -> \"architecture\"\n",
"[OK] \"bed\" -> \"bed\"\n",
"[OK] \"hunt\" -> \"hunt\"\n",
"[OK] \"densities back\" -> \"densities back\"\n",
"[ERR:5] \"nameplate amount\" -> \"nameplate acre\"\n",
"[OK] \"instrumentation feelings\" -> \"instrumentation feelings\"\n",
"[OK] \"reading origin\" -> \"reading origin\"\n",
"[OK] \"macro\" -> \"macro\"\n",
"[OK] \"workbook\" -> \"workbook\"\n",
"[OK] \"oxide components\" -> \"oxide components\"\n",
"[OK] \"breaths\" -> \"breaths\"\n",
"[ERR:1] \"clicks\" -> \"click\"\n",
"[OK] \"fetch\" -> \"fetch\"\n",
"[OK] \"buildings\" -> \"buildings\"\n",
"[OK] \"dump\" -> \"dump\"\n",
"[OK] \"bread\" -> \"bread\"\n",
"[OK] \"sense blades\" -> \"sense blades\"\n",
"[OK] \"headers\" -> \"headers\"\n",
"[ERR:2] \"watt\" -> \"bat\"\n",
"[OK] \"affair\" -> \"affair\"\n",
"[OK] \"permission sockets\" -> \"permission sockets\"\n",
"[OK] \"agreement custody\" -> \"agreement custody\"\n",
"[OK] \"dependencies safety\" -> \"dependencies safety\"\n",
"[OK] \"compromises\" -> \"compromises\"\n",
"[OK] \"horsepower\" -> \"horsepower\"\n",
"[OK] \"choice presentations\" -> \"choice presentations\"\n",
"[OK] \"means\" -> \"means\"\n",
"[OK] \"variables\" -> \"variables\"\n",
"[ERR:1] \"attesting triggers\" -> \"attesting trigger\"\n",
"[OK] \"receivers\" -> \"receivers\"\n",
"[OK] \"triggers department\" -> \"triggers department\"\n",
"[OK] \"wafers\" -> \"wafers\"\n",
"[OK] \"sisters\" -> \"sisters\"\n",
"[OK] \"barge dash\" -> \"barge dash\"\n",
"[OK] \"swords\" -> \"swords\"\n",
"[OK] \"lime timer\" -> \"lime timer\"\n",
"[ERR:1] \"grooves\" -> \"groves\"\n",
"[OK] \"ticket tablet\" -> \"ticket tablet\"\n",
"[ERR:6] \"setup reliabilities\" -> \"setup credibility\"\n",
"[OK] \"analog\" -> \"analog\"\n",
"[OK] \"legends\" -> \"legends\"\n",
"[OK] \"baskets story\" -> \"baskets story\"\n",
"[OK] \"alerts chase\" -> \"alerts chase\"\n",
"[OK] \"retailer\" -> \"retailer\"\n",
"[OK] \"mask\" -> \"mask\"\n",
"[OK] \"stamp\" -> \"stamp\"\n",
"[OK] \"bigamies decibel\" -> \"bigamies decibel\"\n",
"[OK] \"equipment resistor\" -> \"equipment resistor\"\n",
"[OK] \"staplers passbooks\" -> \"staplers passbooks\"\n",
"[OK] \"manifests\" -> \"manifests\"\n",
"[OK] \"stairs houses\" -> \"stairs houses\"\n",
"[OK] \"future\" -> \"future\"\n",
"[ERR:5] \"visit dedications\" -> \"viidesivations\"\n",
"[OK] \"affiant\" -> \"affiant\"\n",
"[ERR:2] \"buzz attachment\" -> \"bud attachment\"\n",
"[OK] \"specification\" -> \"specification\"\n",
"[OK] \"utilizations tongues\" -> \"utilizations tongues\"\n",
"[OK] \"litres thirteens\" -> \"litres thirteens\"\n",
"[OK] \"watchstanding\" -> \"watchstanding\"\n",
"[OK] \"leader drains\" -> \"leader drains\"\n",
"[OK] \"depth\" -> \"depth\"\n",
"[OK] \"floor\" -> \"floor\"\n",
"[ERR:1] \"neck molecules\" -> \"neck molecule\"\n",
"[OK] \"crime\" -> \"crime\"\n",
"[OK] \"corrosion\" -> \"corrosion\"\n",
"[OK] \"shares skies\" -> \"shares skies\"\n",
"[ERR:3] \"cosals doorknob\" -> \"cosals dorkrnok\"\n",
"[ERR:5] \"radian exhaust\" -> \"radian event\"\n",
"[OK] \"classification\" -> \"classification\"\n",
"[OK] \"garden\" -> \"garden\"\n",
"[OK] \"propulsion\" -> \"propulsion\"\n",
"[OK] \"piece\" -> \"piece\"\n",
"[OK] \"turnaround forearms\" -> \"turnaround forearms\"\n",
"[OK] \"treatment\" -> \"treatment\"\n",
"[OK] \"absence capes\" -> \"absence capes\"\n",
"[ERR:7] \"splash kilometers\" -> \"splash film\"\n",
"[OK] \"alternates commitment\" -> \"alternates commitment\"\n",
"[OK] \"fifties\" -> \"fifties\"\n",
"[OK] \"twos throttle\" -> \"twos throttle\"\n",
"[OK] \"axis decoder\" -> \"axis decoder\"\n",
"[OK] \"exchangers highways\" -> \"exchangers highways\"\n",
"[OK] \"arms\" -> \"arms\"\n",
"[ERR:2] \"threader\" -> \"thread\"\n",
"[OK] \"foreground interest\" -> \"foreground interest\"\n",
"[OK] \"contamination\" -> \"contamination\"\n",
"[OK] \"writers abuse\" -> \"writers abuse\"\n",
"[OK] \"peck alley\" -> \"peck alley\"\n",
"[OK] \"listings\" -> \"listings\"\n",
"[OK] \"race\" -> \"race\"\n",
"[OK] \"sweeps electronics\" -> \"sweeps electronics\"\n",
"[ERR:6] \"cough deployment\" -> \"cough delctcer\"\n",
"[ERR:4] \"today representative\" -> \"today represntations\"\n",
"[OK] \"difficulty paw\" -> \"difficulty paw\"\n",
"[OK] \"visit\" -> \"visit\"\n",
"[OK] \"diver press\" -> \"diver press\"\n",
"[OK] \"anthems\" -> \"anthems\"\n",
"[OK] \"inclinations workload\" -> \"inclinations workload\"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[OK] \"slaves families\" -> \"slaves families\"\n",
"[OK] \"stabilization face\" -> \"stabilization face\"\n",
"[OK] \"switches\" -> \"switches\"\n",
"[OK] \"balance reinforcement\" -> \"balance reinforcement\"\n",
"[OK] \"detents\" -> \"detents\"\n",
"[OK] \"punctures\" -> \"punctures\"\n",
"[OK] \"cabinet\" -> \"cabinet\"\n",
"[ERR:4] \"products execution\" -> \"products action\"\n",
"[OK] \"screwdrivers wins\" -> \"screwdrivers wins\"\n",
"[OK] \"mention\" -> \"mention\"\n",
"[OK] \"paragraphs\" -> \"paragraphs\"\n",
"[OK] \"worries rains\" -> \"worries rains\"\n",
"[OK] \"talks proficiencies\" -> \"talks proficiencies\"\n",
"[OK] \"justice ounce\" -> \"justice ounce\"\n",
"[OK] \"motel bows\" -> \"motel bows\"\n",
"[OK] \"investment\" -> \"investment\"\n",
"[OK] \"treatment region\" -> \"treatment region\"\n",
"[OK] \"line\" -> \"line\"\n",
"[OK] \"implement\" -> \"implement\"\n",
"[OK] \"grooves\" -> \"grooves\"\n",
"[OK] \"currents fort\" -> \"currents fort\"\n",
"[OK] \"zones\" -> \"zones\"\n",
"[OK] \"drillers butt\" -> \"drillers butt\"\n",
"[OK] \"strike authority\" -> \"strike authority\"\n",
"[OK] \"shed span\" -> \"shed span\"\n",
"[OK] \"swamp\" -> \"swamp\"\n",
"[OK] \"dawn\" -> \"dawn\"\n",
"[OK] \"mattress\" -> \"mattress\"\n",
"[OK] \"appellate electricians\" -> \"appellate electricians\"\n",
"[OK] \"thumbs\" -> \"thumbs\"\n",
"[OK] \"rear\" -> \"rear\"\n",
"[OK] \"relations\" -> \"relations\"\n",
"[OK] \"stability envelopes\" -> \"stability envelopes\"\n",
"[OK] \"soups\" -> \"soups\"\n",
"[OK] \"notes\" -> \"notes\"\n",
"[OK] \"dot gangway\" -> \"dot gangway\"\n",
"[OK] \"edge\" -> \"edge\"\n",
"[ERR:6] \"inspection preservers\" -> \"inspection pears\"\n",
"[OK] \"counsel ceiling\" -> \"counsel ceiling\"\n",
"[OK] \"product road\" -> \"product road\"\n",
"[OK] \"fashions\" -> \"fashions\"\n",
"[ERR:2] \"beginner courtesy\" -> \"beginner courses\"\n",
"[OK] \"absence\" -> \"absence\"\n",
"[OK] \"throats\" -> \"throats\"\n",
"[OK] \"beginners locks\" -> \"beginners locks\"\n",
"[OK] \"gyros resistor\" -> \"gyros resistor\"\n",
"[OK] \"pin ices\" -> \"pin ices\"\n",
"[OK] \"warfare\" -> \"warfare\"\n",
"[ERR:3] \"runouts capital\" -> \"runouts capincr\"\n",
"[OK] \"damage\" -> \"damage\"\n",
"[ERR:2] \"eliminator equations\" -> \"eliminatorequation\"\n",
"[OK] \"tolerance\" -> \"tolerance\"\n",
"[OK] \"seconds\" -> \"seconds\"\n",
"[OK] \"cashiers\" -> \"cashiers\"\n",
"[OK] \"installations\" -> \"installations\"\n",
"[OK] \"wagons valleys\" -> \"wagons valleys\"\n",
"[OK] \"magnets\" -> \"magnets\"\n",
"[OK] \"victim\" -> \"victim\"\n",
"[OK] \"wafers educator\" -> \"wafers educator\"\n",
"[OK] \"stuff flare\" -> \"stuff flare\"\n",
"[OK] \"combination threaders\" -> \"combination threaders\"\n",
"[OK] \"garage\" -> \"garage\"\n",
"[OK] \"schedule coxswain\" -> \"schedule coxswain\"\n",
"[OK] \"investment\" -> \"investment\"\n",
"[OK] \"sparks lanterns\" -> \"sparks lanterns\"\n",
"[OK] \"elbow\" -> \"elbow\"\n",
"[OK] \"wars\" -> \"wars\"\n",
"[OK] \"escort\" -> \"escort\"\n",
"[OK] \"breads patterns\" -> \"breads patterns\"\n",
"[OK] \"tacks leakage\" -> \"tacks leakage\"\n",
"[OK] \"benefits deletion\" -> \"benefits deletion\"\n",
"[OK] \"pump itineraries\" -> \"pump itineraries\"\n",
"[ERR:6] \"swim documentations\" -> \"swim document\"\n",
"[OK] \"propulsion\" -> \"propulsion\"\n",
"[ERR:5] \"river conn\" -> \"dives cap\"\n",
"[OK] \"stuff\" -> \"stuff\"\n",
"[OK] \"signal refunds\" -> \"signal refunds\"\n",
"[OK] \"canisters\" -> \"canisters\"\n",
"[OK] \"markets\" -> \"markets\"\n",
"[OK] \"movements sponsors\" -> \"movements sponsors\"\n",
"[ERR:6] \"scab flower\" -> \"cap flag\"\n",
"[OK] \"barrel\" -> \"barrel\"\n",
"[ERR:3] \"plexiglass routes\" -> \"plexiglass rotors\"\n",
"[OK] \"technology secretaries\" -> \"technology secretaries\"\n",
"[OK] \"conflict\" -> \"conflict\"\n",
"[OK] \"heights interactions\" -> \"heights interactions\"\n",
"[OK] \"assembly widths\" -> \"assembly widths\"\n",
"[OK] \"hail\" -> \"hail\"\n",
"[ERR:3] \"characteristics friends\" -> \"characteristics fines\"\n",
"[OK] \"cause chances\" -> \"cause chances\"\n",
"[ERR:3] \"coughs term\" -> \"coughs termpom\"\n",
"[OK] \"baby\" -> \"baby\"\n",
"[OK] \"breakdown refrigerator\" -> \"breakdown refrigerator\"\n",
"[OK] \"segment\" -> \"segment\"\n",
"[OK] \"games\" -> \"games\"\n",
"[OK] \"act module\" -> \"act module\"\n",
"[OK] \"retrieval\" -> \"retrieval\"\n",
"[OK] \"aims probability\" -> \"aims probability\"\n",
"[OK] \"accountability\" -> \"accountability\"\n",
"[ERR:2] \"deposit precision\" -> \"deposit decision\"\n",
"[OK] \"tailor\" -> \"tailor\"\n",
"[OK] \"letter\" -> \"letter\"\n",
"[OK] \"theory\" -> \"theory\"\n",
"[ERR:3] \"hug\" -> \"buzz\"\n",
"[OK] \"funding\" -> \"funding\"\n",
"[OK] \"argument\" -> \"argument\"\n",
"[OK] \"heights separations\" -> \"heights separations\"\n",
"[OK] \"hinges\" -> \"hinges\"\n",
"[OK] \"mists cups\" -> \"mists cups\"\n",
"[OK] \"panels inlets\" -> \"panels inlets\"\n",
"[OK] \"task effectiveness\" -> \"task effectiveness\"\n",
"[OK] \"funds\" -> \"funds\"\n",
"[OK] \"stretchers\" -> \"stretchers\"\n",
"[OK] \"livers tachometer\" -> \"livers tachometer\"\n",
"[OK] \"livers noses\" -> \"livers noses\"\n",
"[ERR:7] \"torpedoes images\" -> \"torpedo mnatirs\"\n",
"[OK] \"hyphen\" -> \"hyphen\"\n",
"[OK] \"arrival\" -> \"arrival\"\n",
"[OK] \"union millimeters\" -> \"union millimeters\"\n",
"Batch: 4 / 8\n",
"Ground truth -> Recognized\n",
"[OK] \"rags\" -> \"rags\"\n",
"[ERR:1] \"hilltops\" -> \"hilltop\"\n",
"[OK] \"drift\" -> \"drift\"\n",
"[OK] \"fund\" -> \"fund\"\n",
"[OK] \"fold\" -> \"fold\"\n",
"[OK] \"ceilings club\" -> \"ceilings club\"\n",
"[OK] \"texts church\" -> \"texts church\"\n",
"[OK] \"crashes friends\" -> \"crashes friends\"\n",
"[OK] \"films\" -> \"films\"\n",
"[OK] \"aggravation\" -> \"aggravation\"\n",
"[OK] \"picks hold\" -> \"picks hold\"\n",
"[OK] \"furs headquarters\" -> \"furs headquarters\"\n",
"[OK] \"dioxides\" -> \"dioxides\"\n",
"[ERR:4] \"representative being\" -> \"representative babies\"\n",
"[OK] \"volt bank\" -> \"volt bank\"\n",
"[OK] \"ornament intensities\" -> \"ornament intensities\"\n",
"[OK] \"input\" -> \"input\"\n",
"[ERR:1] \"drum\" -> \"drug\"\n",
"[OK] \"iron challenge\" -> \"iron challenge\"\n",
"[OK] \"troubleshooters\" -> \"troubleshooters\"\n",
"[OK] \"checkout\" -> \"checkout\"\n",
"[OK] \"difficulties\" -> \"difficulties\"\n",
"[OK] \"chimney chambers\" -> \"chimney chambers\"\n",
"[OK] \"preventions\" -> \"preventions\"\n",
"[OK] \"eighths\" -> \"eighths\"\n",
"[OK] \"increases\" -> \"increases\"\n",
"[OK] \"cars welder\" -> \"cars welder\"\n",
"[OK] \"careers manifest\" -> \"careers manifest\"\n",
"[OK] \"poke blurs\" -> \"poke blurs\"\n",
"[OK] \"headsets paintings\" -> \"headsets paintings\"\n",
"[OK] \"frames residue\" -> \"frames residue\"\n",
"[OK] \"detonation\" -> \"detonation\"\n",
"[ERR:4] \"swaps pat\" -> \"spans man\"\n",
"[OK] \"lenses\" -> \"lenses\"\n",
"[OK] \"rear racks\" -> \"rear racks\"\n",
"[OK] \"tenders\" -> \"tenders\"\n",
"[OK] \"repair\" -> \"repair\"\n",
"[OK] \"infections broadcast\" -> \"infections broadcast\"\n",
"[OK] \"example malfunctions\" -> \"example malfunctions\"\n",
"[OK] \"hatchet auditor\" -> \"hatchet auditor\"\n",
"[OK] \"linkage\" -> \"linkage\"\n",
"[OK] \"diesels\" -> \"diesels\"\n",
"[OK] \"fabrications\" -> \"fabrications\"\n",
"[OK] \"eliminators spray\" -> \"eliminators spray\"\n",
"[OK] \"friday\" -> \"friday\"\n",
"[OK] \"energies\" -> \"energies\"\n",
"[OK] \"staple majority\" -> \"staple majority\"\n",
"[OK] \"spacer\" -> \"spacer\"\n",
"[ERR:3] \"panel lane\" -> \"pane can\"\n",
"[OK] \"magnitude\" -> \"magnitude\"\n",
"[ERR:3] \"withdrawal conn\" -> \"withdrawal car\"\n",
"[OK] \"bucket\" -> \"bucket\"\n",
"[OK] \"recesses\" -> \"recesses\"\n",
"[OK] \"admirals fits\" -> \"admirals fits\"\n",
"[OK] \"wines blindfold\" -> \"wines blindfold\"\n",
"[OK] \"topic magnitude\" -> \"topic magnitude\"\n",
"[OK] \"discrimination\" -> \"discrimination\"\n",
"[OK] \"duplicates dollar\" -> \"duplicates dollar\"\n",
"[OK] \"stacks programs\" -> \"stacks programs\"\n",
"[OK] \"circumference digit\" -> \"circumference digit\"\n",
"[OK] \"runaway multitask\" -> \"runaway multitask\"\n",
"[OK] \"approvals\" -> \"approvals\"\n",
"[OK] \"arrow\" -> \"arrow\"\n",
"[ERR:7] \"scales handwriting\" -> \"scales handler\"\n",
"[ERR:4] \"implantations success\" -> \"implantations buses\"\n",
"[OK] \"fireballs\" -> \"fireballs\"\n",
"[OK] \"giants obligations\" -> \"giants obligations\"\n",
"[OK] \"inquiry observations\" -> \"inquiry observations\"\n",
"[ERR:1] \"arguments\" -> \"argument\"\n",
"[OK] \"offense buzzers\" -> \"offense buzzers\"\n",
"[OK] \"auditors transformer\" -> \"auditors transformer\"\n",
"[OK] \"islands\" -> \"islands\"\n",
"[OK] \"irons\" -> \"irons\"\n",
"[OK] \"corrections replenishment\" -> \"corrections replenishment\"\n",
"[OK] \"numerals spark\" -> \"numerals spark\"\n",
"[OK] \"crowd\" -> \"crowd\"\n",
"[OK] \"perforations\" -> \"perforations\"\n",
"[ERR:4] \"authorizations subtotal\" -> \"authorizations subtask\"\n",
"[OK] \"interviews\" -> \"interviews\"\n",
"[OK] \"mornings console\" -> \"mornings console\"\n",
"[OK] \"habit concern\" -> \"habit concern\"\n",
"[OK] \"multiplication\" -> \"multiplication\"\n",
"[OK] \"fasteners anchor\" -> \"fasteners anchor\"\n",
"[OK] \"divisions\" -> \"divisions\"\n",
"[OK] \"disadvantage\" -> \"disadvantage\"\n",
"[OK] \"aggravations alignment\" -> \"aggravations alignment\"\n",
"[OK] \"propellers\" -> \"propellers\"\n",
"[OK] \"slate rating\" -> \"slate rating\"\n",
"[OK] \"button interest\" -> \"button interest\"\n",
"[ERR:2] \"whirl data\" -> \"whip data\"\n",
"[OK] \"offering\" -> \"offering\"\n",
"[OK] \"cramps\" -> \"cramps\"\n",
"[OK] \"warship\" -> \"warship\"\n",
"[OK] \"speech\" -> \"speech\"\n",
"[OK] \"winches defeat\" -> \"winches defeat\"\n",
"[OK] \"detention\" -> \"detention\"\n",
"[OK] \"toe dangers\" -> \"toe dangers\"\n",
"[OK] \"atmosphere\" -> \"atmosphere\"\n",
"[ERR:1] \"measurements\" -> \"measurement\"\n",
"[OK] \"interval navies\" -> \"interval navies\"\n",
"[OK] \"jams heights\" -> \"jams heights\"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[OK] \"bread fives\" -> \"bread fives\"\n",
"[OK] \"seesaws grease\" -> \"seesaws grease\"\n",
"[OK] \"total\" -> \"total\"\n",
"[OK] \"stapler packs\" -> \"stapler packs\"\n",
"[OK] \"embosses\" -> \"embosses\"\n",
"[OK] \"energies expenditure\" -> \"energies expenditure\"\n",
"[OK] \"dots stomachs\" -> \"dots stomachs\"\n",
"[OK] \"halves\" -> \"halves\"\n",
"[OK] \"membrane tan\" -> \"membrane tan\"\n",
"[OK] \"trouble runway\" -> \"trouble runway\"\n",
"[OK] \"drunks shed\" -> \"drunks shed\"\n",
"[OK] \"phases\" -> \"phases\"\n",
"[ERR:2] \"levels energy\" -> \"levels enemy\"\n",
"[OK] \"makeup\" -> \"makeup\"\n",
"[OK] \"guards oscillators\" -> \"guards oscillators\"\n",
"[OK] \"here\" -> \"here\"\n",
"[OK] \"rations\" -> \"rations\"\n",
"[OK] \"directories speech\" -> \"directories speech\"\n",
"[OK] \"walk quiet\" -> \"walk quiet\"\n",
"[OK] \"heel\" -> \"heel\"\n",
"[OK] \"messages\" -> \"messages\"\n",
"[OK] \"cotton computations\" -> \"cotton computations\"\n",
"[OK] \"guards\" -> \"guards\"\n",
"[OK] \"confession\" -> \"confession\"\n",
"[OK] \"visit\" -> \"visit\"\n",
"[OK] \"abrasion\" -> \"abrasion\"\n",
"[OK] \"systems tension\" -> \"systems tension\"\n",
"[OK] \"alphabet\" -> \"alphabet\"\n",
"[OK] \"densities subprograms\" -> \"densities subprograms\"\n",
"[OK] \"welder\" -> \"welder\"\n",
"[OK] \"fireballs\" -> \"fireballs\"\n",
"[OK] \"afternoon poisons\" -> \"afternoon poisons\"\n",
"[OK] \"lifeboats\" -> \"lifeboats\"\n",
"[OK] \"mouths\" -> \"mouths\"\n",
"[OK] \"tricks tourniquets\" -> \"tricks tourniquets\"\n",
"[ERR:6] \"rollouts duration\" -> \"fallout drain\"\n",
"[OK] \"particles evening\" -> \"particles evening\"\n",
"[OK] \"elections cartridge\" -> \"elections cartridge\"\n",
"[ERR:5] \"executives\" -> \"corecutinces\"\n",
"[OK] \"concurrence hatchet\" -> \"concurrence hatchet\"\n",
"[OK] \"being\" -> \"being\"\n",
"[OK] \"flashlight\" -> \"flashlight\"\n",
"[OK] \"assembly\" -> \"assembly\"\n",
"[OK] \"distributors satellites\" -> \"distributors satellites\"\n",
"[OK] \"helicopters resources\" -> \"helicopters resources\"\n",
"[OK] \"hats\" -> \"hats\"\n",
"[OK] \"volts\" -> \"volts\"\n",
"[OK] \"receptacles\" -> \"receptacles\"\n",
"[OK] \"standards pink\" -> \"standards pink\"\n",
"[OK] \"enlistments lake\" -> \"enlistments lake\"\n",
"[OK] \"limits drawer\" -> \"limits drawer\"\n",
"[OK] \"official\" -> \"official\"\n",
"[OK] \"choices recruit\" -> \"choices recruit\"\n",
"[OK] \"stroke drifts\" -> \"stroke drifts\"\n",
"[OK] \"equation suspects\" -> \"equation suspects\"\n",
"[ERR:2] \"captain eye\" -> \"captain age\"\n",
"[ERR:3] \"warehouses pipes\" -> \"warehouses pecks\"\n",
"[OK] \"food diamond\" -> \"food diamond\"\n",
"[OK] \"shape\" -> \"shape\"\n",
"[OK] \"pane vibration\" -> \"pane vibration\"\n",
"[OK] \"subroutine\" -> \"subroutine\"\n",
"[OK] \"candidates slots\" -> \"candidates slots\"\n",
"[OK] \"subroutines\" -> \"subroutines\"\n",
"[OK] \"contacts\" -> \"contacts\"\n",
"[OK] \"speed\" -> \"speed\"\n",
"[OK] \"uniforms store\" -> \"uniforms store\"\n",
"[OK] \"occasion churches\" -> \"occasion churches\"\n",
"[OK] \"edges\" -> \"edges\"\n",
"[OK] \"verse\" -> \"verse\"\n",
"[ERR:4] \"confession radar\" -> \"confession airs\"\n",
"[OK] \"regrets\" -> \"regrets\"\n",
"[OK] \"plants\" -> \"plants\"\n",
"[OK] \"window pennant\" -> \"window pennant\"\n",
"[OK] \"diagonals\" -> \"diagonals\"\n",
"[OK] \"stall\" -> \"stall\"\n",
"[OK] \"invoices\" -> \"invoices\"\n",
"[OK] \"odors milestone\" -> \"odors milestone\"\n",
"[OK] \"trust asterisks\" -> \"trust asterisks\"\n",
"[OK] \"ores\" -> \"ores\"\n",
"[OK] \"congress\" -> \"congress\"\n",
"[OK] \"pounds\" -> \"pounds\"\n",
"[OK] \"clumps vapor\" -> \"clumps vapor\"\n",
"[OK] \"gear\" -> \"gear\"\n",
"[OK] \"torpedoes offense\" -> \"torpedoes offense\"\n",
"[OK] \"outlines punishments\" -> \"outlines punishments\"\n",
"[OK] \"precautions\" -> \"precautions\"\n",
"[OK] \"holddown\" -> \"holddown\"\n",
"[ERR:1] \"pink\" -> \"ink\"\n",
"[ERR:4] \"telecommunication discrepancies\" -> \"telecommunication dicpncies\"\n",
"[OK] \"relationships\" -> \"relationships\"\n",
"[OK] \"fumes ball\" -> \"fumes ball\"\n",
"[OK] \"ventilators symbols\" -> \"ventilators symbols\"\n",
"[OK] \"facilitation decrease\" -> \"facilitation decrease\"\n",
"[OK] \"discriminations bays\" -> \"discriminations bays\"\n",
"[OK] \"hands cracks\" -> \"hands cracks\"\n",
"[OK] \"explosives statement\" -> \"explosives statement\"\n",
"[OK] \"ticket junk\" -> \"ticket junk\"\n",
"[OK] \"stairs athwartship\" -> \"stairs athwartship\"\n",
"[OK] \"chair observer\" -> \"chair observer\"\n",
"[OK] \"conversion\" -> \"conversion\"\n",
"[OK] \"kisses chair\" -> \"kisses chair\"\n",
"[OK] \"post\" -> \"post\"\n",
"[OK] \"being\" -> \"being\"\n",
"[OK] \"reliability\" -> \"reliability\"\n",
"[OK] \"lashes\" -> \"lashes\"\n",
"[OK] \"driver\" -> \"driver\"\n",
"[OK] \"electron creeks\" -> \"electron creeks\"\n",
"[ERR:5] \"acres desires\" -> \"acres being\"\n",
"[ERR:1] \"quotas\" -> \"quota\"\n",
"[ERR:1] \"appraisal signalmen\" -> \"appraisals signalmen\"\n",
"[OK] \"precedence tumble\" -> \"precedence tumble\"\n",
"[OK] \"bail invoice\" -> \"bail invoice\"\n",
"[OK] \"stairs scale\" -> \"stairs scale\"\n",
"[OK] \"weed\" -> \"weed\"\n",
"[OK] \"security nomenclatures\" -> \"security nomenclatures\"\n",
"[OK] \"crash\" -> \"crash\"\n",
"[ERR:1] \"dispatches forecastles\" -> \"dispatches forecastle\"\n",
"[OK] \"compensations\" -> \"compensations\"\n",
"[OK] \"catalogs bends\" -> \"catalogs bends\"\n",
"[OK] \"curves\" -> \"curves\"\n",
"[OK] \"victims\" -> \"victims\"\n",
"[ERR:1] \"hints thin\" -> \"hints thing\"\n",
"[OK] \"discussions\" -> \"discussions\"\n",
"[OK] \"soles discriminations\" -> \"soles discriminations\"\n",
"[OK] \"bullet brackets\" -> \"bullet brackets\"\n",
"[OK] \"departures\" -> \"departures\"\n",
"[OK] \"coxswain clerk\" -> \"coxswain clerk\"\n",
"[OK] \"stomachs\" -> \"stomachs\"\n",
"[OK] \"qualification\" -> \"qualification\"\n",
"[OK] \"distributions courts\" -> \"distributions courts\"\n",
"[OK] \"button lick\" -> \"button lick\"\n",
"[OK] \"administrator\" -> \"administrator\"\n",
"[OK] \"stripe chin\" -> \"stripe chin\"\n",
"[OK] \"receipts\" -> \"receipts\"\n",
"[OK] \"entries parameters\" -> \"entries parameters\"\n",
"[OK] \"fifths\" -> \"fifths\"\n",
"[OK] \"operand backups\" -> \"operand backups\"\n",
"[OK] \"principle sentry\" -> \"principle sentry\"\n",
"[OK] \"figure\" -> \"figure\"\n",
"[OK] \"presentations\" -> \"presentations\"\n",
"[OK] \"thirties greenwich\" -> \"thirties greenwich\"\n",
"[OK] \"lockers endeavor\" -> \"lockers endeavor\"\n",
"[OK] \"moves category\" -> \"moves category\"\n",
"[OK] \"gases\" -> \"gases\"\n",
"[OK] \"drugs\" -> \"drugs\"\n",
"[OK] \"nurses\" -> \"nurses\"\n",
"[OK] \"stings elapses\" -> \"stings elapses\"\n",
"[OK] \"milligrams\" -> \"milligrams\"\n",
"[OK] \"sides\" -> \"sides\"\n",
"[OK] \"alignments\" -> \"alignments\"\n",
"[OK] \"duplicate gear\" -> \"duplicate gear\"\n",
"[OK] \"greenwich validations\" -> \"greenwich validations\"\n",
"[OK] \"firearms\" -> \"firearms\"\n",
"[OK] \"doorknob landings\" -> \"doorknob landings\"\n",
"[OK] \"verb airport\" -> \"verb airport\"\n",
"[OK] \"cameras\" -> \"cameras\"\n",
"[ERR:1] \"possibilities divisions\" -> \"possibilities division\"\n",
"[OK] \"notice\" -> \"notice\"\n",
"[OK] \"subtotal bristles\" -> \"subtotal bristles\"\n",
"[OK] \"crops\" -> \"crops\"\n",
"[OK] \"splints swings\" -> \"splints swings\"\n",
"[ERR:10] \"occurrences procurements\" -> \"occurrences ratios\"\n",
"[ERR:5] \"excuse damage\" -> \"excuse air\"\n",
"[OK] \"gallows\" -> \"gallows\"\n",
"[OK] \"speakers diagnosis\" -> \"speakers diagnosis\"\n",
"[OK] \"daytime person\" -> \"daytime person\"\n",
"[OK] \"regions\" -> \"regions\"\n",
"[OK] \"accounts\" -> \"accounts\"\n",
"[OK] \"fruit mistake\" -> \"fruit mistake\"\n",
"[OK] \"bristle\" -> \"bristle\"\n",
"[OK] \"silver\" -> \"silver\"\n",
"[OK] \"legend formation\" -> \"legend formation\"\n",
"[OK] \"compliance knife\" -> \"compliance knife\"\n",
"[OK] \"acceleration\" -> \"acceleration\"\n",
"[OK] \"distance freezes\" -> \"distance freezes\"\n",
"[OK] \"sort\" -> \"sort\"\n",
"[OK] \"interior gloves\" -> \"interior gloves\"\n",
"[ERR:3] \"slap boilers\" -> \"slap boil\"\n",
"[OK] \"rigs\" -> \"rigs\"\n",
"[OK] \"computer\" -> \"computer\"\n",
"[OK] \"shores enemies\" -> \"shores enemies\"\n",
"[OK] \"glances songs\" -> \"glances songs\"\n",
"[OK] \"inch feature\" -> \"inch feature\"\n",
"[OK] \"wools\" -> \"wools\"\n",
"[OK] \"fiction incentive\" -> \"fiction incentive\"\n",
"[ERR:3] \"efficiencies recovery\" -> \"efficiencies cover\"\n",
"[OK] \"operators\" -> \"operators\"\n",
"[OK] \"chases clock\" -> \"chases clock\"\n",
"[ERR:2] \"edge hardships\" -> \"eve hardships\"\n",
"[OK] \"throat\" -> \"throat\"\n",
"[OK] \"reactors\" -> \"reactors\"\n",
"[ERR:2] \"skew swamp\" -> \"skew camp\"\n",
"[OK] \"claws\" -> \"claws\"\n",
"[OK] \"reels\" -> \"reels\"\n",
"[OK] \"alias\" -> \"alias\"\n",
"[OK] \"principals paste\" -> \"principals paste\"\n",
"[OK] \"spaces\" -> \"spaces\"\n",
"[OK] \"equation lesson\" -> \"equation lesson\"\n",
"[OK] \"trip egg\" -> \"trip egg\"\n",
"[ERR:3] \"string masters\" -> \"string mastioes\"\n",
"[OK] \"attitudes glazes\" -> \"attitudes glazes\"\n",
"[OK] \"operands diameters\" -> \"operands diameters\"\n",
"[OK] \"bushings\" -> \"bushings\"\n",
"[OK] \"skips similarity\" -> \"skips similarity\"\n",
"[OK] \"advisers\" -> \"advisers\"\n",
"[ERR:4] \"tourniquets procurement\" -> \"torques procurement\"\n",
"[OK] \"levers airplane\" -> \"levers airplane\"\n",
"[OK] \"participations\" -> \"participations\"\n",
"[OK] \"privileges compasses\" -> \"privileges compasses\"\n",
"[OK] \"trips\" -> \"trips\"\n",
"[OK] \"applications animals\" -> \"applications animals\"\n",
"[OK] \"solder tars\" -> \"solder tars\"\n",
"[OK] \"pacific\" -> \"pacific\"\n",
"[OK] \"duration solvents\" -> \"duration solvents\"\n",
"[ERR:4] \"sister lashes\" -> \"sister gas\"\n",
"[OK] \"stoppering\" -> \"stoppering\"\n",
"[OK] \"hardness burns\" -> \"hardness burns\"\n",
"[OK] \"readiness mills\" -> \"readiness mills\"\n",
"[OK] \"application\" -> \"application\"\n",
"[OK] \"curvature courts\" -> \"curvature courts\"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[OK] \"months\" -> \"months\"\n",
"[OK] \"fall\" -> \"fall\"\n",
"[OK] \"language table\" -> \"language table\"\n",
"[OK] \"bandages\" -> \"bandages\"\n",
"[OK] \"stack leaks\" -> \"stack leaks\"\n",
"[OK] \"dust cockpits\" -> \"dust cockpits\"\n",
"[OK] \"dishes boxcar\" -> \"dishes boxcar\"\n",
"[OK] \"services\" -> \"services\"\n",
"[OK] \"union\" -> \"union\"\n",
"[OK] \"motions prime\" -> \"motions prime\"\n",
"[OK] \"knocks slate\" -> \"knocks slate\"\n",
"[OK] \"lifetime\" -> \"lifetime\"\n",
"[OK] \"debt\" -> \"debt\"\n",
"[OK] \"capacities\" -> \"capacities\"\n",
"[OK] \"accusation\" -> \"accusation\"\n",
"[OK] \"worm tear\" -> \"worm tear\"\n",
"[OK] \"tactics\" -> \"tactics\"\n",
"[OK] \"precaution workload\" -> \"precaution workload\"\n",
"[OK] \"stretcher\" -> \"stretcher\"\n",
"[OK] \"charts\" -> \"charts\"\n",
"[ERR:1] \"coders cameras\" -> \"coders camera\"\n",
"[OK] \"oaks here\" -> \"oaks here\"\n",
"[OK] \"surprise\" -> \"surprise\"\n",
"[OK] \"watches market\" -> \"watches market\"\n",
"[OK] \"saddles\" -> \"saddles\"\n",
"[OK] \"rating\" -> \"rating\"\n",
"[ERR:4] \"shelter pointer\" -> \"shelter coin\"\n",
"[OK] \"stakes\" -> \"stakes\"\n",
"[OK] \"mixture\" -> \"mixture\"\n",
"[ERR:5] \"slots stoppered\" -> \"slots stop\"\n",
"[OK] \"abuses raises\" -> \"abuses raises\"\n",
"[OK] \"eligibility automobiles\" -> \"eligibility automobiles\"\n",
"[OK] \"petitions difficulty\" -> \"petitions difficulty\"\n",
"[OK] \"outlines\" -> \"outlines\"\n",
"[OK] \"ration\" -> \"ration\"\n",
"[OK] \"builder skips\" -> \"builder skips\"\n",
"[OK] \"neck\" -> \"neck\"\n",
"[ERR:6] \"parcels\" -> \"coal\"\n",
"[OK] \"directories\" -> \"directories\"\n",
"[OK] \"spades\" -> \"spades\"\n",
"[OK] \"warship flight\" -> \"warship flight\"\n",
"[OK] \"photodiode\" -> \"photodiode\"\n",
"[OK] \"mornings\" -> \"mornings\"\n",
"[OK] \"standardization laws\" -> \"standardization laws\"\n",
"[OK] \"petitions wonder\" -> \"petitions wonder\"\n",
"[OK] \"seam\" -> \"seam\"\n",
"[OK] \"switches legislation\" -> \"switches legislation\"\n",
"[ERR:1] \"creek\" -> \"creeks\"\n",
"[OK] \"binders\" -> \"binders\"\n",
"[OK] \"morning\" -> \"morning\"\n",
"[OK] \"linkage horizons\" -> \"linkage horizons\"\n",
"[OK] \"retractor furnace\" -> \"retractor furnace\"\n",
"[OK] \"artilleries\" -> \"artilleries\"\n",
"[OK] \"lanterns choke\" -> \"lanterns choke\"\n",
"[OK] \"additions\" -> \"additions\"\n",
"[OK] \"sticks\" -> \"sticks\"\n",
"[OK] \"effort ohm\" -> \"effort ohm\"\n",
"[ERR:3] \"dispatcher jurisdiction\" -> \"dispatcher yrsdiction\"\n",
"[OK] \"sale chart\" -> \"sale chart\"\n",
"[OK] \"front department\" -> \"front department\"\n",
"[OK] \"december\" -> \"december\"\n",
"[OK] \"baths result\" -> \"baths result\"\n",
"[OK] \"breaches\" -> \"breaches\"\n",
"[ERR:2] \"breakdown workman\" -> \"breakdown woman\"\n",
"[OK] \"guides discounts\" -> \"guides discounts\"\n",
"[OK] \"pack\" -> \"pack\"\n",
"[OK] \"substance\" -> \"substance\"\n",
"[OK] \"rockets end\" -> \"rockets end\"\n",
"[ERR:1] \"displacement hill\" -> \"displacement kill\"\n",
"[OK] \"polish gunnery\" -> \"polish gunnery\"\n",
"[OK] \"card\" -> \"card\"\n",
"[OK] \"sons\" -> \"sons\"\n",
"[ERR:2] \"drum form\" -> \"drum fogs\"\n",
"[OK] \"cruiser\" -> \"cruiser\"\n",
"[OK] \"searchlight\" -> \"searchlight\"\n",
"[OK] \"gyros anthem\" -> \"gyros anthem\"\n",
"[OK] \"nuts\" -> \"nuts\"\n",
"[OK] \"pencils detection\" -> \"pencils detection\"\n",
"[OK] \"chair\" -> \"chair\"\n",
"[OK] \"kisses\" -> \"kisses\"\n",
"[OK] \"management\" -> \"management\"\n",
"[OK] \"runaway\" -> \"runaway\"\n",
"[OK] \"default\" -> \"default\"\n",
"[OK] \"meals bubbles\" -> \"meals bubbles\"\n",
"[OK] \"glossary wines\" -> \"glossary wines\"\n",
"[OK] \"electronics curls\" -> \"electronics curls\"\n",
"[OK] \"practice receptacles\" -> \"practice receptacles\"\n",
"[OK] \"pen\" -> \"pen\"\n",
"[ERR:5] \"explanations projects\" -> \"explanations pole\"\n",
"[OK] \"heat\" -> \"heat\"\n",
"[OK] \"cameras chases\" -> \"cameras chases\"\n",
"[ERR:2] \"sprayer\" -> \"spray\"\n",
"[OK] \"cry figure\" -> \"cry figure\"\n",
"[OK] \"bat system\" -> \"bat system\"\n",
"[OK] \"bit\" -> \"bit\"\n",
"[ERR:4] \"engines workload\" -> \"engines work\"\n",
"[OK] \"talk screwdriver\" -> \"talk screwdriver\"\n",
"[OK] \"cannon\" -> \"cannon\"\n",
"[OK] \"foods\" -> \"foods\"\n",
"[OK] \"compressor\" -> \"compressor\"\n",
"[OK] \"ramp streets\" -> \"ramp streets\"\n",
"[OK] \"patterns greenwich\" -> \"patterns greenwich\"\n",
"[OK] \"practice\" -> \"practice\"\n",
"[OK] \"pushups\" -> \"pushups\"\n",
"[OK] \"apprenticeship\" -> \"apprenticeship\"\n",
"[OK] \"countries saps\" -> \"countries saps\"\n",
"[OK] \"dam\" -> \"dam\"\n",
"[ERR:3] \"displacements mist\" -> \"displacements misses\"\n",
"[OK] \"measure\" -> \"measure\"\n",
"[OK] \"canisters title\" -> \"canisters title\"\n",
"[OK] \"violations relief\" -> \"violations relief\"\n",
"[ERR:4] \"conjunction possession\" -> \"conjunction position\"\n",
"[OK] \"fighter\" -> \"fighter\"\n",
"[OK] \"traps\" -> \"traps\"\n",
"[OK] \"sections work\" -> \"sections work\"\n",
"[OK] \"rifles alloys\" -> \"rifles alloys\"\n",
"[OK] \"people\" -> \"people\"\n",
"[OK] \"backup\" -> \"backup\"\n",
"[OK] \"transactions\" -> \"transactions\"\n",
"[OK] \"privileges electrodes\" -> \"privileges electrodes\"\n",
"[ERR:4] \"introduction barriers\" -> \"introduction barge\"\n",
"[OK] \"index groups\" -> \"index groups\"\n",
"[OK] \"fake\" -> \"fake\"\n",
"[OK] \"nut\" -> \"nut\"\n",
"[OK] \"instances\" -> \"instances\"\n",
"[OK] \"confidences\" -> \"confidences\"\n",
"[OK] \"category\" -> \"category\"\n",
"[OK] \"rules honk\" -> \"rules honk\"\n",
"[OK] \"cavity indicator\" -> \"cavity indicator\"\n",
"[OK] \"retrievals\" -> \"retrievals\"\n",
"[OK] \"hits\" -> \"hits\"\n",
"[OK] \"grasses eye\" -> \"grasses eye\"\n",
"[OK] \"occurrence\" -> \"occurrence\"\n",
"[OK] \"device certificate\" -> \"device certificate\"\n",
"[OK] \"terminations\" -> \"terminations\"\n",
"[OK] \"compressions swamps\" -> \"compressions swamps\"\n",
"[OK] \"profiles\" -> \"profiles\"\n",
"[OK] \"customs\" -> \"customs\"\n",
"[OK] \"work\" -> \"work\"\n",
"[ERR:1] \"execution numbers\" -> \"execution number\"\n",
"[OK] \"search\" -> \"search\"\n",
"[OK] \"cycles sentence\" -> \"cycles sentence\"\n",
"[OK] \"silicon\" -> \"silicon\"\n",
"[OK] \"lids offers\" -> \"lids offers\"\n",
"[OK] \"generation barge\" -> \"generation barge\"\n",
"[OK] \"proficiency\" -> \"proficiency\"\n",
"[OK] \"alcoholism\" -> \"alcoholism\"\n",
"[OK] \"sting technique\" -> \"sting technique\"\n",
"[OK] \"lifetime\" -> \"lifetime\"\n",
"[OK] \"value\" -> \"value\"\n",
"[OK] \"fee sums\" -> \"fee sums\"\n",
"[ERR:3] \"source freshwater\" -> \"source freshwal\"\n",
"[OK] \"boils\" -> \"boils\"\n",
"[OK] \"alibis\" -> \"alibis\"\n",
"[OK] \"focuses\" -> \"focuses\"\n",
"[OK] \"bushel pointers\" -> \"bushel pointers\"\n",
"[OK] \"tons pay\" -> \"tons pay\"\n",
"[OK] \"mouths\" -> \"mouths\"\n",
"[OK] \"north interfaces\" -> \"north interfaces\"\n",
"[OK] \"hem\" -> \"hem\"\n",
"[OK] \"neglect mittens\" -> \"neglect mittens\"\n",
"[OK] \"fluids\" -> \"fluids\"\n",
"[ERR:1] \"savings\" -> \"saving\"\n",
"[ERR:6] \"telecommunications locks\" -> \"telecommunications\"\n",
"[OK] \"presents news\" -> \"presents news\"\n",
"[OK] \"pedal\" -> \"pedal\"\n",
"[OK] \"test bullets\" -> \"test bullets\"\n",
"[OK] \"sale\" -> \"sale\"\n",
"[OK] \"members\" -> \"members\"\n",
"[OK] \"definitions\" -> \"definitions\"\n",
"[OK] \"spill twist\" -> \"spill twist\"\n",
"[OK] \"trace\" -> \"trace\"\n",
"[ERR:4] \"average\" -> \"arrays\"\n",
"[ERR:5] \"transmittals subtotal\" -> \"transmittals metal\"\n",
"[OK] \"totals\" -> \"totals\"\n",
"[ERR:1] \"sons\" -> \"son\"\n",
"[OK] \"troops\" -> \"troops\"\n",
"[OK] \"tapes bills\" -> \"tapes bills\"\n",
"[OK] \"recess detail\" -> \"recess detail\"\n",
"Batch: 5 / 8\n",
"Ground truth -> Recognized\n",
"[OK] \"counsel\" -> \"counsel\"\n",
"[OK] \"objects\" -> \"objects\"\n",
"[OK] \"magnet rail\" -> \"magnet rail\"\n",
"[OK] \"responsibility\" -> \"responsibility\"\n",
"[ERR:6] \"hydraulics attorneys\" -> \"hydraulics atom\"\n",
"[OK] \"beds\" -> \"beds\"\n",
"[OK] \"pail\" -> \"pail\"\n",
"[OK] \"currencies mile\" -> \"currencies mile\"\n",
"[OK] \"web cars\" -> \"web cars\"\n",
"[OK] \"ranges\" -> \"ranges\"\n",
"[OK] \"opportunities\" -> \"opportunities\"\n",
"[OK] \"sashes\" -> \"sashes\"\n",
"[OK] \"debris\" -> \"debris\"\n",
"[OK] \"dates\" -> \"dates\"\n",
"[OK] \"cost\" -> \"cost\"\n",
"[OK] \"alerts interfaces\" -> \"alerts interfaces\"\n",
"[OK] \"topside refrigerators\" -> \"topside refrigerators\"\n",
"[OK] \"display\" -> \"display\"\n",
"[OK] \"center\" -> \"center\"\n",
"[OK] \"settings\" -> \"settings\"\n",
"[OK] \"pots\" -> \"pots\"\n",
"[ERR:2] \"recess flaps\" -> \"races flaps\"\n",
"[OK] \"trainer\" -> \"trainer\"\n",
"[OK] \"aid intakes\" -> \"aid intakes\"\n",
"[OK] \"things tear\" -> \"things tear\"\n",
"[OK] \"pocket\" -> \"pocket\"\n",
"[OK] \"rim\" -> \"rim\"\n",
"[OK] \"velocities drops\" -> \"velocities drops\"\n",
"[OK] \"spars\" -> \"spars\"\n",
"[ERR:1] \"reconfigurations presences\" -> \"reconfigurationspresences\"\n",
"[OK] \"court\" -> \"court\"\n",
"[OK] \"tunnel\" -> \"tunnel\"\n",
"[OK] \"ax majors\" -> \"ax majors\"\n",
"[OK] \"cellars\" -> \"cellars\"\n",
"[OK] \"computations log\" -> \"computations log\"\n",
"[OK] \"beam\" -> \"beam\"\n",
"[OK] \"latitude surplus\" -> \"latitude surplus\"\n",
"[OK] \"highline\" -> \"highline\"\n",
"[OK] \"navigators bigamies\" -> \"navigators bigamies\"\n",
"[OK] \"offset\" -> \"offset\"\n",
"[OK] \"electricians\" -> \"electricians\"\n",
"[OK] \"scheduler\" -> \"scheduler\"\n",
"[OK] \"students\" -> \"students\"\n",
"[OK] \"swamps\" -> \"swamps\"\n",
"[OK] \"fastener credit\" -> \"fastener credit\"\n",
"[OK] \"inlets\" -> \"inlets\"\n",
"[OK] \"abrasives\" -> \"abrasives\"\n",
"[OK] \"door photograph\" -> \"door photograph\"\n",
"[OK] \"trunk speech\" -> \"trunk speech\"\n",
"[OK] \"chests signal\" -> \"chests signal\"\n",
"[OK] \"account\" -> \"account\"\n",
"[OK] \"pane\" -> \"pane\"\n",
"[OK] \"yard writers\" -> \"yard writers\"\n",
"[OK] \"azimuth pleasure\" -> \"azimuth pleasure\"\n",
"[OK] \"leaks splicer\" -> \"leaks splicer\"\n",
"[OK] \"preserver\" -> \"preserver\"\n",
"[OK] \"accomplishments\" -> \"accomplishments\"\n",
"[OK] \"connections keyboards\" -> \"connections keyboards\"\n",
"[OK] \"fighters needles\" -> \"fighters needles\"\n",
"[OK] \"harpoons greenwich\" -> \"harpoons greenwich\"\n",
"[OK] \"swallow thursdays\" -> \"swallow thursdays\"\n",
"[OK] \"flag\" -> \"flag\"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[OK] \"requirements jars\" -> \"requirements jars\"\n",
"[OK] \"jelly\" -> \"jelly\"\n",
"[OK] \"shift endeavor\" -> \"shift endeavor\"\n",
"[OK] \"sediments\" -> \"sediments\"\n",
"[OK] \"tents ax\" -> \"tents ax\"\n",
"[OK] \"fog\" -> \"fog\"\n",
"[OK] \"transformers\" -> \"transformers\"\n",
"[OK] \"reproduction\" -> \"reproduction\"\n",
"[OK] \"paces wage\" -> \"paces wage\"\n",
"[OK] \"share\" -> \"share\"\n",
"[OK] \"features plans\" -> \"features plans\"\n",
"[OK] \"allotments\" -> \"allotments\"\n",
"[OK] \"precision debris\" -> \"precision debris\"\n",
"[ERR:1] \"offenses\" -> \"offense\"\n",
"[OK] \"chills women\" -> \"chills women\"\n",
"[OK] \"dioxide example\" -> \"dioxide example\"\n",
"[OK] \"relations swimmer\" -> \"relations swimmer\"\n",
"[OK] \"relationship\" -> \"relationship\"\n",
"[OK] \"rejections interpreters\" -> \"rejections interpreters\"\n",
"[OK] \"principal\" -> \"principal\"\n",
"[OK] \"pyramid coast\" -> \"pyramid coast\"\n",
"[OK] \"scene gland\" -> \"scene gland\"\n",
"[OK] \"tablespoon implantations\" -> \"tablespoon implantations\"\n",
"[OK] \"missile spans\" -> \"missile spans\"\n",
"[OK] \"reservists\" -> \"reservists\"\n",
"[OK] \"eases titles\" -> \"eases titles\"\n",
"[OK] \"arrivals meeting\" -> \"arrivals meeting\"\n",
"[OK] \"movement net\" -> \"movement net\"\n",
"[OK] \"ending\" -> \"ending\"\n",
"[OK] \"distress\" -> \"distress\"\n",
"[OK] \"analyses diagram\" -> \"analyses diagram\"\n",
"[OK] \"state\" -> \"state\"\n",
"[OK] \"nod wheel\" -> \"nod wheel\"\n",
"[OK] \"facepieces subtotals\" -> \"facepieces subtotals\"\n",
"[OK] \"beads proficiencies\" -> \"beads proficiencies\"\n",
"[OK] \"observer\" -> \"observer\"\n",
"[OK] \"adviser night\" -> \"adviser night\"\n",
"[OK] \"dangers\" -> \"dangers\"\n",
"[OK] \"threads interference\" -> \"threads interference\"\n",
"[OK] \"collection experiences\" -> \"collection experiences\"\n",
"[OK] \"road comfort\" -> \"road comfort\"\n",
"[OK] \"sharpeners lubrication\" -> \"sharpeners lubrication\"\n",
"[OK] \"equipment\" -> \"equipment\"\n",
"[OK] \"dopes\" -> \"dopes\"\n",
"[OK] \"fathers roller\" -> \"fathers roller\"\n",
"[OK] \"account attempts\" -> \"account attempts\"\n",
"[OK] \"discretion bristle\" -> \"discretion bristle\"\n",
"[OK] \"presumptions\" -> \"presumptions\"\n",
"[OK] \"continuity video\" -> \"continuity video\"\n",
"[OK] \"sheeting\" -> \"sheeting\"\n",
"[OK] \"pattern dates\" -> \"pattern dates\"\n",
"[OK] \"apprenticeship projects\" -> \"apprenticeship projects\"\n",
"[OK] \"audit tables\" -> \"audit tables\"\n",
"[OK] \"island\" -> \"island\"\n",
"[OK] \"mornings money\" -> \"mornings money\"\n",
"[OK] \"taxis\" -> \"taxis\"\n",
"[OK] \"abuse consideration\" -> \"abuse consideration\"\n",
"[OK] \"displacement tune\" -> \"displacement tune\"\n",
"[OK] \"airplane\" -> \"airplane\"\n",
"[OK] \"fiction\" -> \"fiction\"\n",
"[ERR:3] \"complements degree\" -> \"complements dare\"\n",
"[ERR:3] \"axis\" -> \"davits\"\n",
"[OK] \"utility assembly\" -> \"utility assembly\"\n",
"[OK] \"cities\" -> \"cities\"\n",
"[ERR:2] \"pick cargo\" -> \"pick car\"\n",
"[ERR:4] \"merchandise shame\" -> \"merchandise sinks\"\n",
"[OK] \"drink\" -> \"drink\"\n",
"[OK] \"warship\" -> \"warship\"\n",
"[OK] \"delivery\" -> \"delivery\"\n",
"[OK] \"decay logic\" -> \"decay logic\"\n",
"[OK] \"flashlight\" -> \"flashlight\"\n",
"[OK] \"divider\" -> \"divider\"\n",
"[OK] \"draft\" -> \"draft\"\n",
"[OK] \"anthems\" -> \"anthems\"\n",
"[OK] \"fist rebounds\" -> \"fist rebounds\"\n",
"[OK] \"majors smiles\" -> \"majors smiles\"\n",
"[ERR:5] \"lumber\" -> \"lumber wood\"\n",
"[OK] \"scheduler housefall\" -> \"scheduler housefall\"\n",
"[ERR:2] \"blasts preference\" -> \"blast preferences\"\n",
"[OK] \"menus yolk\" -> \"menus yolk\"\n",
"[OK] \"location\" -> \"location\"\n",
"[OK] \"longitudes insanities\" -> \"longitudes insanities\"\n",
"[OK] \"beacons bushes\" -> \"beacons bushes\"\n",
"[OK] \"definitions countries\" -> \"definitions countries\"\n",
"[OK] \"canister\" -> \"canister\"\n",
"[OK] \"swims board\" -> \"swims board\"\n",
"[OK] \"valley mirror\" -> \"valley mirror\"\n",
"[OK] \"population\" -> \"population\"\n",
"[OK] \"extras ramps\" -> \"extras ramps\"\n",
"[ERR:2] \"butt springs\" -> \"bat springs\"\n",
"[ERR:5] \"lumber\" -> \"lumber wood\"\n",
"[OK] \"foam\" -> \"foam\"\n",
"[OK] \"projectile coder\" -> \"projectile coder\"\n",
"[OK] \"flap\" -> \"flap\"\n",
"[OK] \"coordinates additives\" -> \"coordinates additives\"\n",
"[OK] \"fives car\" -> \"fives car\"\n",
"[OK] \"cautions\" -> \"cautions\"\n",
"[OK] \"twos\" -> \"twos\"\n",
"[OK] \"lips\" -> \"lips\"\n",
"[OK] \"aircraft\" -> \"aircraft\"\n",
"[OK] \"pattern moves\" -> \"pattern moves\"\n",
"[OK] \"intents\" -> \"intents\"\n",
"[OK] \"remainder bars\" -> \"remainder bars\"\n",
"[OK] \"splints towels\" -> \"splints towels\"\n",
"[OK] \"concentration\" -> \"concentration\"\n",
"[OK] \"wingnuts cups\" -> \"wingnuts cups\"\n",
"[OK] \"delight schoolhouses\" -> \"delight schoolhouses\"\n",
"[OK] \"substitute shell\" -> \"substitute shell\"\n",
"[OK] \"hotel jump\" -> \"hotel jump\"\n",
"[OK] \"gangway\" -> \"gangway\"\n",
"[OK] \"technicians\" -> \"technicians\"\n",
"[ERR:1] \"grasp area\" -> \"grasp areas\"\n",
"[OK] \"disk bet\" -> \"disk bet\"\n",
"[OK] \"animals purges\" -> \"animals purges\"\n",
"[OK] \"attack\" -> \"attack\"\n",
"[OK] \"binoculars\" -> \"binoculars\"\n",
"[OK] \"reservoirs holds\" -> \"reservoirs holds\"\n",
"[OK] \"survey\" -> \"survey\"\n",
"[OK] \"thicknesses\" -> \"thicknesses\"\n",
"[ERR:4] \"associates breakdown\" -> \"associates break\"\n",
"[OK] \"shells\" -> \"shells\"\n",
"[OK] \"holes problems\" -> \"holes problems\"\n",
"[OK] \"frigates\" -> \"frigates\"\n",
"[OK] \"chaplains dollies\" -> \"chaplains dollies\"\n",
"[OK] \"alibi mast\" -> \"alibi mast\"\n",
"[OK] \"compass\" -> \"compass\"\n",
"[OK] \"sips\" -> \"sips\"\n",
"[OK] \"stages\" -> \"stages\"\n",
"[OK] \"seam\" -> \"seam\"\n",
"[OK] \"dispatcher\" -> \"dispatcher\"\n",
"[OK] \"repairs forms\" -> \"repairs forms\"\n",
"[OK] \"advantages\" -> \"advantages\"\n",
"[ERR:3] \"launches pen\" -> \"launches linen\"\n",
"[ERR:2] \"log\" -> \"toe\"\n",
"[OK] \"drunkeness rods\" -> \"drunkeness rods\"\n",
"[OK] \"hillside\" -> \"hillside\"\n",
"[ERR:14] \"aggravation lieutenants\" -> \"variation view\"\n",
"[OK] \"drydocks plays\" -> \"drydocks plays\"\n",
"[ERR:2] \"exit bail\" -> \"bit bail\"\n",
"[ERR:6] \"ceremony victims\" -> \"ceremony yoriine\"\n",
"[OK] \"person\" -> \"person\"\n",
"[OK] \"traffic\" -> \"traffic\"\n",
"[OK] \"valleys\" -> \"valleys\"\n",
"[OK] \"amperage\" -> \"amperage\"\n",
"[OK] \"results\" -> \"results\"\n",
"[OK] \"clearance siren\" -> \"clearance siren\"\n",
"[OK] \"toothpick\" -> \"toothpick\"\n",
"[OK] \"figures senses\" -> \"figures senses\"\n",
"[OK] \"establishments\" -> \"establishments\"\n",
"[OK] \"detection\" -> \"detection\"\n",
"[OK] \"throttles prices\" -> \"throttles prices\"\n",
"[ERR:6] \"links specifications\" -> \"links specifice\"\n",
"[OK] \"discounts\" -> \"discounts\"\n",
"[OK] \"alphabet depths\" -> \"alphabet depths\"\n",
"[OK] \"solenoids\" -> \"solenoids\"\n",
"[OK] \"helmets\" -> \"helmets\"\n",
"[OK] \"escape nurses\" -> \"escape nurses\"\n",
"[OK] \"displacement\" -> \"displacement\"\n",
"[OK] \"reaction pointer\" -> \"reaction pointer\"\n",
"[OK] \"waxes grasses\" -> \"waxes grasses\"\n",
"[OK] \"remainders clips\" -> \"remainders clips\"\n",
"[OK] \"usage\" -> \"usage\"\n",
"[ERR:4] \"blinks memory\" -> \"blinks hem\"\n",
"[OK] \"bushing readers\" -> \"bushing readers\"\n",
"[OK] \"coughs\" -> \"coughs\"\n",
"[OK] \"sap\" -> \"sap\"\n",
"[OK] \"discontinuation\" -> \"discontinuation\"\n",
"[OK] \"hoist time\" -> \"hoist time\"\n",
"[OK] \"preparations\" -> \"preparations\"\n",
"[ERR:2] \"butts whips\" -> \"bats whips\"\n",
"[OK] \"searchlights rule\" -> \"searchlights rule\"\n",
"[OK] \"cube semicolons\" -> \"cube semicolons\"\n",
"[ERR:1] \"bowl mattress\" -> \"boil mattress\"\n",
"[ERR:2] \"carriage futures\" -> \"carriage features\"\n",
"[OK] \"milestone crowns\" -> \"milestone crowns\"\n",
"[OK] \"salts entrance\" -> \"salts entrance\"\n",
"[OK] \"curls\" -> \"curls\"\n",
"[OK] \"saving\" -> \"saving\"\n",
"[OK] \"crowds software\" -> \"crowds software\"\n",
"[OK] \"miss\" -> \"miss\"\n",
"[OK] \"lee rudders\" -> \"lee rudders\"\n",
"[OK] \"legislation glue\" -> \"legislation glue\"\n",
"[OK] \"insertions\" -> \"insertions\"\n",
"[OK] \"bows entrapment\" -> \"bows entrapment\"\n",
"[OK] \"meaning\" -> \"meaning\"\n",
"[OK] \"conventions bottoms\" -> \"conventions bottoms\"\n",
"[OK] \"coin confusions\" -> \"coin confusions\"\n",
"[OK] \"lime\" -> \"lime\"\n",
"[OK] \"arrivals\" -> \"arrivals\"\n",
"[OK] \"passes fetch\" -> \"passes fetch\"\n",
"[OK] \"audits\" -> \"audits\"\n",
"[OK] \"mat\" -> \"mat\"\n",
"[OK] \"experience coughs\" -> \"experience coughs\"\n",
"[OK] \"burns carts\" -> \"burns carts\"\n",
"[OK] \"receptacle\" -> \"receptacle\"\n",
"[OK] \"fighter\" -> \"fighter\"\n",
"[OK] \"rejection termination\" -> \"rejection termination\"\n",
"[OK] \"gyroscopes\" -> \"gyroscopes\"\n",
"[ERR:1] \"casualties lifeboats\" -> \"casualties lifeboat\"\n",
"[OK] \"chatter\" -> \"chatter\"\n",
"[OK] \"combatant\" -> \"combatant\"\n",
"[OK] \"ways structures\" -> \"ways structures\"\n",
"[OK] \"elimination\" -> \"elimination\"\n",
"[OK] \"propellers rims\" -> \"propellers rims\"\n",
"[OK] \"fumes mint\" -> \"fumes mint\"\n",
"[OK] \"trouble\" -> \"trouble\"\n",
"[OK] \"arrival\" -> \"arrival\"\n",
"[OK] \"limp alcohol\" -> \"limp alcohol\"\n",
"[OK] \"assistant abrasion\" -> \"assistant abrasion\"\n",
"[OK] \"restriction\" -> \"restriction\"\n",
"[OK] \"originators stations\" -> \"originators stations\"\n",
"[OK] \"story dolly\" -> \"story dolly\"\n",
"[OK] \"confidences\" -> \"confidences\"\n",
"[OK] \"nurse hushes\" -> \"nurse hushes\"\n",
"[OK] \"nozzle\" -> \"nozzle\"\n",
"[OK] \"cot\" -> \"cot\"\n",
"[OK] \"fruits instrument\" -> \"fruits instrument\"\n",
"[OK] \"shower syntax\" -> \"shower syntax\"\n",
"[OK] \"folds\" -> \"folds\"\n",
"[ERR:4] \"battle module\" -> \"battle bolt\"\n",
"[OK] \"analyzer facepiece\" -> \"analyzer facepiece\"\n",
"[ERR:4] \"regions book\" -> \"regions beads\"\n",
"[OK] \"witnesses forts\" -> \"witnesses forts\"\n",
"[OK] \"thumb arrivals\" -> \"thumb arrivals\"\n",
"[OK] \"allotments tunnels\" -> \"allotments tunnels\"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ERR:2] \"sponsor rejections\" -> \"sponsor reactions\"\n",
"[OK] \"fees pitches\" -> \"fees pitches\"\n",
"[OK] \"energy\" -> \"energy\"\n",
"[OK] \"arrays\" -> \"arrays\"\n",
"[OK] \"tubing\" -> \"tubing\"\n",
"[OK] \"software automation\" -> \"software automation\"\n",
"[OK] \"deployment\" -> \"deployment\"\n",
"[OK] \"much\" -> \"much\"\n",
"[OK] \"afternoon washtub\" -> \"afternoon washtub\"\n",
"[OK] \"accomplishment\" -> \"accomplishment\"\n",
"[OK] \"valves\" -> \"valves\"\n",
"[ERR:3] \"grips misconduct\" -> \"grips miscond\"\n",
"[OK] \"hazard\" -> \"hazard\"\n",
"[OK] \"holddowns august\" -> \"holddowns august\"\n",
"[OK] \"fits\" -> \"fits\"\n",
"[OK] \"butts\" -> \"butts\"\n",
"[ERR:4] \"acquittals emitter\" -> \"acquittals letters\"\n",
"[OK] \"learning\" -> \"learning\"\n",
"[OK] \"bays habits\" -> \"bays habits\"\n",
"[ERR:4] \"mounts tax\" -> \"mounts arch\"\n",
"[OK] \"concepts\" -> \"concepts\"\n",
"[OK] \"bore\" -> \"bore\"\n",
"[OK] \"environments equipment\" -> \"environments equipment\"\n",
"[OK] \"gate\" -> \"gate\"\n",
"[OK] \"falls\" -> \"falls\"\n",
"[ERR:1] \"buoys marbles\" -> \"buys marbles\"\n",
"[OK] \"surpluses adherence\" -> \"surpluses adherence\"\n",
"[OK] \"initiator cylinders\" -> \"initiator cylinders\"\n",
"[ERR:1] \"stoppers tips\" -> \"stoppers trips\"\n",
"[OK] \"ticks\" -> \"ticks\"\n",
"[OK] \"runouts forts\" -> \"runouts forts\"\n",
"[OK] \"park harmony\" -> \"park harmony\"\n",
"[OK] \"diodes\" -> \"diodes\"\n",
"[OK] \"medicines search\" -> \"medicines search\"\n",
"[OK] \"funds\" -> \"funds\"\n",
"[OK] \"lifeboats\" -> \"lifeboats\"\n",
"[OK] \"receipts\" -> \"receipts\"\n",
"[OK] \"feed ships\" -> \"feed ships\"\n",
"[OK] \"discrepancy improvements\" -> \"discrepancy improvements\"\n",
"[OK] \"steams\" -> \"steams\"\n",
"[ERR:2] \"hunt chair\" -> \"hunt car\"\n",
"[OK] \"thumb velocities\" -> \"thumb velocities\"\n",
"[OK] \"sound\" -> \"sound\"\n",
"[OK] \"variety\" -> \"variety\"\n",
"[OK] \"yield jacket\" -> \"yield jacket\"\n",
"[OK] \"balloons\" -> \"balloons\"\n",
"[OK] \"hill launcher\" -> \"hill launcher\"\n",
"[OK] \"screens\" -> \"screens\"\n",
"[OK] \"bristle float\" -> \"bristle float\"\n",
"[OK] \"infection\" -> \"infection\"\n",
"[OK] \"apportionment\" -> \"apportionment\"\n",
"[OK] \"switches encounter\" -> \"switches encounter\"\n",
"[OK] \"sequences fluids\" -> \"sequences fluids\"\n",
"[OK] \"retrievals mountains\" -> \"retrievals mountains\"\n",
"[OK] \"interview\" -> \"interview\"\n",
"[OK] \"curtains\" -> \"curtains\"\n",
"[OK] \"transistors\" -> \"transistors\"\n",
"[ERR:2] \"malfunction eraser\" -> \"malfunction eases\"\n",
"[OK] \"judge artillery\" -> \"judge artillery\"\n",
"[OK] \"amount\" -> \"amount\"\n",
"[OK] \"spaces\" -> \"spaces\"\n",
"[OK] \"correction\" -> \"correction\"\n",
"[ERR:1] \"districts pulls\" -> \"districts pull\"\n",
"[OK] \"races jams\" -> \"races jams\"\n",
"[OK] \"barrier\" -> \"barrier\"\n",
"[OK] \"quiets\" -> \"quiets\"\n",
"[OK] \"exchange warships\" -> \"exchange warships\"\n",
"[ERR:7] \"advantages radiation\" -> \"daduntaes grcdization\"\n",
"[OK] \"blazes prop\" -> \"blazes prop\"\n",
"[ERR:1] \"ingredients\" -> \"ingredient\"\n",
"[OK] \"amperage checker\" -> \"amperage checker\"\n",
"[OK] \"supermarkets\" -> \"supermarkets\"\n",
"[OK] \"cheek\" -> \"cheek\"\n",
"[OK] \"bears\" -> \"bears\"\n",
"[OK] \"hunks\" -> \"hunks\"\n",
"[OK] \"trip\" -> \"trip\"\n",
"[OK] \"connections ices\" -> \"connections ices\"\n",
"[OK] \"implantations percentages\" -> \"implantations percentages\"\n",
"[OK] \"grasses\" -> \"grasses\"\n",
"[OK] \"classifications\" -> \"classifications\"\n",
"[OK] \"closures box\" -> \"closures box\"\n",
"[OK] \"respiration\" -> \"respiration\"\n",
"[OK] \"checker\" -> \"checker\"\n",
"[OK] \"nuts translator\" -> \"nuts translator\"\n",
"[ERR:4] \"huts binders\" -> \"huts bin\"\n",
"[OK] \"riding manifest\" -> \"riding manifest\"\n",
"[ERR:2] \"wagons dusts\" -> \"wagons cuts\"\n",
"[OK] \"searchlights\" -> \"searchlights\"\n",
"[OK] \"fires wagon\" -> \"fires wagon\"\n",
"[OK] \"dispatcher flowers\" -> \"dispatcher flowers\"\n",
"[OK] \"spoke\" -> \"spoke\"\n",
"[ERR:9] \"configuration installations\" -> \"configuration ideals\"\n",
"[OK] \"cab confinement\" -> \"cab confinement\"\n",
"[OK] \"visions\" -> \"visions\"\n",
"[OK] \"navigators\" -> \"navigators\"\n",
"[OK] \"analyzers\" -> \"analyzers\"\n",
"[OK] \"smokes\" -> \"smokes\"\n",
"[OK] \"complexes\" -> \"complexes\"\n",
"[OK] \"daughters\" -> \"daughters\"\n",
"[OK] \"levers\" -> \"levers\"\n",
"[OK] \"pulse\" -> \"pulse\"\n",
"[OK] \"buoy\" -> \"buoy\"\n",
"[OK] \"kinds\" -> \"kinds\"\n",
"[OK] \"terminators means\" -> \"terminators means\"\n",
"[OK] \"drips\" -> \"drips\"\n",
"[OK] \"originals\" -> \"originals\"\n",
"[OK] \"harbor\" -> \"harbor\"\n",
"[OK] \"preposition propellers\" -> \"preposition propellers\"\n",
"[ERR:7] \"seawater adverbs\" -> \"heater acres\"\n",
"[OK] \"rice\" -> \"rice\"\n",
"[OK] \"methodology frequencies\" -> \"methodology frequencies\"\n",
"[OK] \"paints\" -> \"paints\"\n",
"[OK] \"auditor\" -> \"auditor\"\n",
"[OK] \"stocks ramp\" -> \"stocks ramp\"\n",
"[OK] \"amplitude sentence\" -> \"amplitude sentence\"\n",
"[OK] \"strips\" -> \"strips\"\n",
"[OK] \"governors firearm\" -> \"governors firearm\"\n",
"[OK] \"discrimination\" -> \"discrimination\"\n",
"[OK] \"alignments\" -> \"alignments\"\n",
"[OK] \"house rose\" -> \"house rose\"\n",
"[OK] \"diagnosis asterisk\" -> \"diagnosis asterisk\"\n",
"[OK] \"cameras\" -> \"cameras\"\n",
"[OK] \"couple\" -> \"couple\"\n",
"[ERR:1] \"needs\" -> \"need\"\n",
"[OK] \"friday\" -> \"friday\"\n",
"[OK] \"juries\" -> \"juries\"\n",
"[OK] \"strengths\" -> \"strengths\"\n",
"[OK] \"coats\" -> \"coats\"\n",
"[OK] \"accountabilities charts\" -> \"accountabilities charts\"\n",
"[ERR:1] \"guesses prints\" -> \"guesses print\"\n",
"[OK] \"island\" -> \"island\"\n",
"[OK] \"patter\" -> \"patter\"\n",
"[ERR:3] \"misfit\" -> \"mosixt\"\n",
"[OK] \"mitts longitudes\" -> \"mitts longitudes\"\n",
"[OK] \"delivery\" -> \"delivery\"\n",
"[OK] \"stitch monday\" -> \"stitch monday\"\n",
"[OK] \"divider exit\" -> \"divider exit\"\n",
"[OK] \"execution\" -> \"execution\"\n",
"[OK] \"defect\" -> \"defect\"\n",
"[OK] \"capability\" -> \"capability\"\n",
"[OK] \"fantails\" -> \"fantails\"\n",
"[OK] \"signal cushions\" -> \"signal cushions\"\n",
"[OK] \"pyramid clocks\" -> \"pyramid clocks\"\n",
"[OK] \"chits\" -> \"chits\"\n",
"[OK] \"leaps kinds\" -> \"leaps kinds\"\n",
"[OK] \"picks\" -> \"picks\"\n",
"[OK] \"capital\" -> \"capital\"\n",
"[OK] \"bunch\" -> \"bunch\"\n",
"[ERR:1] \"mouths\" -> \"mouth\"\n",
"[OK] \"caves targets\" -> \"caves targets\"\n",
"[OK] \"crosses\" -> \"crosses\"\n",
"[OK] \"circulations\" -> \"circulations\"\n",
"[OK] \"flaps yarns\" -> \"flaps yarns\"\n",
"[ERR:1] \"compromises grain\" -> \"compromises grains\"\n",
"[OK] \"zones square\" -> \"zones square\"\n",
"[OK] \"interviewer\" -> \"interviewer\"\n",
"[OK] \"tone\" -> \"tone\"\n",
"[OK] \"roar splitters\" -> \"roar splitters\"\n",
"[ERR:3] \"semicolon bend\" -> \"semicolon beats\"\n",
"[OK] \"electrolyte mission\" -> \"electrolyte mission\"\n",
"[OK] \"tool hint\" -> \"tool hint\"\n",
"[OK] \"coupling capacitances\" -> \"coupling capacitances\"\n",
"[OK] \"frost\" -> \"frost\"\n",
"[OK] \"yaws\" -> \"yaws\"\n",
"[OK] \"region\" -> \"region\"\n",
"[OK] \"passivation\" -> \"passivation\"\n",
"[OK] \"prime societies\" -> \"prime societies\"\n",
"[OK] \"merchants\" -> \"merchants\"\n",
"[OK] \"cellars\" -> \"cellars\"\n",
"[ERR:1] \"stern drops\" -> \"stern drop\"\n",
"[OK] \"families lee\" -> \"families lee\"\n",
"[OK] \"cents tractor\" -> \"cents tractor\"\n",
"[OK] \"piece parachute\" -> \"piece parachute\"\n",
"[OK] \"hotels settlements\" -> \"hotels settlements\"\n",
"[ERR:1] \"verbs article\" -> \"verb article\"\n",
"[OK] \"indications\" -> \"indications\"\n",
"[ERR:4] \"idea\" -> \"bilge\"\n",
"[OK] \"nomenclature\" -> \"nomenclature\"\n",
"[OK] \"calibrations\" -> \"calibrations\"\n",
"[OK] \"integer\" -> \"integer\"\n",
"[OK] \"governor\" -> \"governor\"\n",
"[OK] \"wrists\" -> \"wrists\"\n",
"[OK] \"glide\" -> \"glide\"\n",
"[OK] \"misalignment\" -> \"misalignment\"\n",
"[OK] \"manner ventilation\" -> \"manner ventilation\"\n",
"[OK] \"strike place\" -> \"strike place\"\n",
"[OK] \"jails cents\" -> \"jails cents\"\n",
"[OK] \"fakes\" -> \"fakes\"\n",
"[OK] \"respiration pilots\" -> \"respiration pilots\"\n",
"[OK] \"tires pegs\" -> \"tires pegs\"\n",
"[OK] \"velocity\" -> \"velocity\"\n",
"[OK] \"orange\" -> \"orange\"\n",
"[ERR:1] \"pay listings\" -> \"pay listing\"\n",
"[OK] \"sunday driller\" -> \"sunday driller\"\n",
"[OK] \"topic\" -> \"topic\"\n",
"[OK] \"administration cellar\" -> \"administration cellar\"\n",
"[OK] \"cups\" -> \"cups\"\n",
"[OK] \"rumbles\" -> \"rumbles\"\n",
"[OK] \"look\" -> \"look\"\n",
"[ERR:4] \"bigamies sod\" -> \"bigamies nests\"\n",
"[OK] \"rugs\" -> \"rugs\"\n",
"[OK] \"employee\" -> \"employee\"\n",
"[ERR:6] \"suppression license\" -> \"suppression danger\"\n",
"[OK] \"buildings\" -> \"buildings\"\n",
"[OK] \"abilities administrators\" -> \"abilities administrators\"\n",
"[OK] \"advertisement\" -> \"advertisement\"\n",
"[ERR:4] \"increments jump\" -> \"increments yuytms\"\n",
"[OK] \"side setup\" -> \"side setup\"\n",
"[OK] \"instances chattel\" -> \"instances chattel\"\n",
"[OK] \"physics\" -> \"physics\"\n",
"[OK] \"poisons\" -> \"poisons\"\n",
"[OK] \"energizers screams\" -> \"energizers screams\"\n",
"[OK] \"task rejection\" -> \"task rejection\"\n",
"Batch: 6 / 8\n",
"Ground truth -> Recognized\n",
"[OK] \"lint tables\" -> \"lint tables\"\n",
"[OK] \"employee\" -> \"employee\"\n",
"[ERR:2] \"earth surplus\" -> \"berth surplus\"\n",
"[OK] \"formats\" -> \"formats\"\n",
"[OK] \"slash\" -> \"slash\"\n",
"[ERR:1] \"chits pops\" -> \"chits pop\"\n",
"[OK] \"hillside formation\" -> \"hillside formation\"\n",
"[OK] \"baseline\" -> \"baseline\"\n",
"[OK] \"mattresses\" -> \"mattresses\"\n",
"[OK] \"offsets pail\" -> \"offsets pail\"\n",
"[OK] \"standing\" -> \"standing\"\n",
"[OK] \"dives doorsteps\" -> \"dives doorsteps\"\n",
"[OK] \"dissemination\" -> \"dissemination\"\n",
"[OK] \"groom currents\" -> \"groom currents\"\n",
"[OK] \"attempts\" -> \"attempts\"\n",
"[OK] \"affiants\" -> \"affiants\"\n",
"[ERR:3] \"proportion reservoirs\" -> \"portion reservoirs\"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[OK] \"apostrophes\" -> \"apostrophes\"\n",
"[OK] \"bather spar\" -> \"bather spar\"\n",
"[OK] \"velocities\" -> \"velocities\"\n",
"[OK] \"screen\" -> \"screen\"\n",
"[OK] \"airspeed\" -> \"airspeed\"\n",
"[OK] \"lids setting\" -> \"lids setting\"\n",
"[OK] \"driller\" -> \"driller\"\n",
"[OK] \"duplicates blankets\" -> \"duplicates blankets\"\n",
"[OK] \"grains architecture\" -> \"grains architecture\"\n",
"[ERR:2] \"farads intelligences\" -> \"cards intelligences\"\n",
"[OK] \"hashmark\" -> \"hashmark\"\n",
"[OK] \"interpreters\" -> \"interpreters\"\n",
"[ERR:2] \"seesaw stowage\" -> \"seesaw stage\"\n",
"[OK] \"hardships\" -> \"hardships\"\n",
"[OK] \"paste\" -> \"paste\"\n",
"[OK] \"mention\" -> \"mention\"\n",
"[ERR:1] \"smiles projectiles\" -> \"smiles projectile\"\n",
"[ERR:2] \"communications blocks\" -> \"communications backs\"\n",
"[ERR:1] \"feathers\" -> \"fathers\"\n",
"[ERR:4] \"peg substance\" -> \"peg subtask\"\n",
"[OK] \"glossaries\" -> \"glossaries\"\n",
"[OK] \"reveille\" -> \"reveille\"\n",
"[OK] \"bottom fort\" -> \"bottom fort\"\n",
"[OK] \"semaphores proof\" -> \"semaphores proof\"\n",
"[OK] \"unions\" -> \"unions\"\n",
"[OK] \"apparatuses\" -> \"apparatuses\"\n",
"[ERR:9] \"ampere suction\" -> \"crropre aviation\"\n",
"[OK] \"blackboard\" -> \"blackboard\"\n",
"[OK] \"platform mist\" -> \"platform mist\"\n",
"[OK] \"amplifier\" -> \"amplifier\"\n",
"[OK] \"offenses\" -> \"offenses\"\n",
"[OK] \"sprayers\" -> \"sprayers\"\n",
"[OK] \"highline\" -> \"highline\"\n",
"[OK] \"documentation profession\" -> \"documentation profession\"\n",
"[OK] \"mills butt\" -> \"mills butt\"\n",
"[OK] \"radiation resources\" -> \"radiation resources\"\n",
"[ERR:4] \"paygrade\" -> \"page\"\n",
"[OK] \"saying boresights\" -> \"saying boresights\"\n",
"[OK] \"standards angle\" -> \"standards angle\"\n",
"[OK] \"gangways experiences\" -> \"gangways experiences\"\n",
"[OK] \"enclosure\" -> \"enclosure\"\n",
"[OK] \"candidates kiloliters\" -> \"candidates kiloliters\"\n",
"[ERR:2] \"jobs counters\" -> \"ribs counters\"\n",
"[OK] \"bag chimneys\" -> \"bag chimneys\"\n",
"[OK] \"liberties category\" -> \"liberties category\"\n",
"[OK] \"temperature sight\" -> \"temperature sight\"\n",
"[OK] \"outing sense\" -> \"outing sense\"\n",
"[OK] \"incentive decibel\" -> \"incentive decibel\"\n",
"[ERR:1] \"nights surges\" -> \"nights surge\"\n",
"[OK] \"ceramics\" -> \"ceramics\"\n",
"[OK] \"pencil henrys\" -> \"pencil henrys\"\n",
"[OK] \"abbreviations\" -> \"abbreviations\"\n",
"[ERR:1] \"confinements reel\" -> \"confinements reels\"\n",
"[OK] \"events constitution\" -> \"events constitution\"\n",
"[OK] \"monitors chimneys\" -> \"monitors chimneys\"\n",
"[ERR:3] \"cleanser electricity\" -> \"cleanser relectrity\"\n",
"[OK] \"growth difference\" -> \"growth difference\"\n",
"[OK] \"capes end\" -> \"capes end\"\n",
"[OK] \"directions\" -> \"directions\"\n",
"[OK] \"wrench\" -> \"wrench\"\n",
"[OK] \"keywords\" -> \"keywords\"\n",
"[OK] \"tenths hammer\" -> \"tenths hammer\"\n",
"[ERR:1] \"polish exchanges\" -> \"polishexchanges\"\n",
"[OK] \"stripe stitches\" -> \"stripe stitches\"\n",
"[ERR:2] \"dictionary combs\" -> \"dictionary camps\"\n",
"[OK] \"bypass\" -> \"bypass\"\n",
"[OK] \"protests\" -> \"protests\"\n",
"[OK] \"investigator\" -> \"investigator\"\n",
"[OK] \"key\" -> \"key\"\n",
"[OK] \"wrap\" -> \"wrap\"\n",
"[OK] \"thins\" -> \"thins\"\n",
"[OK] \"abuses\" -> \"abuses\"\n",
"[OK] \"stories calorie\" -> \"stories calorie\"\n",
"[OK] \"choke\" -> \"choke\"\n",
"[OK] \"correlations\" -> \"correlations\"\n",
"[OK] \"shotline\" -> \"shotline\"\n",
"[OK] \"posts throttles\" -> \"posts throttles\"\n",
"[OK] \"disciplines apprehensions\" -> \"disciplines apprehensions\"\n",
"[OK] \"mirrors root\" -> \"mirrors root\"\n",
"[OK] \"tape\" -> \"tape\"\n",
"[OK] \"bails center\" -> \"bails center\"\n",
"[OK] \"november\" -> \"november\"\n",
"[OK] \"procurements fund\" -> \"procurements fund\"\n",
"[OK] \"fabrications\" -> \"fabrications\"\n",
"[OK] \"accelerations lights\" -> \"accelerations lights\"\n",
"[ERR:4] \"gyroscope\" -> \"gyros\"\n",
"[ERR:4] \"resistance stumps\" -> \"resistance sons\"\n",
"[OK] \"master eye\" -> \"master eye\"\n",
"[OK] \"vapors\" -> \"vapors\"\n",
"[OK] \"inventory feeders\" -> \"inventory feeders\"\n",
"[OK] \"calories comb\" -> \"calories comb\"\n",
"[OK] \"bather\" -> \"bather\"\n",
"[OK] \"appropriations equator\" -> \"appropriations equator\"\n",
"[OK] \"crank ax\" -> \"crank ax\"\n",
"[OK] \"tackle smashes\" -> \"tackle smashes\"\n",
"[OK] \"volume\" -> \"volume\"\n",
"[OK] \"yolk sharpeners\" -> \"yolk sharpeners\"\n",
"[OK] \"attempt\" -> \"attempt\"\n",
"[OK] \"men\" -> \"men\"\n",
"[OK] \"muscle\" -> \"muscle\"\n",
"[OK] \"flesh beginner\" -> \"flesh beginner\"\n",
"[OK] \"countermeasure\" -> \"countermeasure\"\n",
"[OK] \"highline\" -> \"highline\"\n",
"[OK] \"runaway\" -> \"runaway\"\n",
"[OK] \"frost airspeeds\" -> \"frost airspeeds\"\n",
"[OK] \"dangers\" -> \"dangers\"\n",
"[OK] \"amperage\" -> \"amperage\"\n",
"[OK] \"animals shoes\" -> \"animals shoes\"\n",
"[OK] \"products\" -> \"products\"\n",
"[ERR:1] \"instrumentation adverbs\" -> \"instrumentation adverb\"\n",
"[OK] \"sidewalks\" -> \"sidewalks\"\n",
"[OK] \"district\" -> \"district\"\n",
"[OK] \"cup\" -> \"cup\"\n",
"[ERR:2] \"seals\" -> \"leaks\"\n",
"[OK] \"calls classes\" -> \"calls classes\"\n",
"[OK] \"scores headset\" -> \"scores headset\"\n",
"[OK] \"stretchers\" -> \"stretchers\"\n",
"[OK] \"combinations\" -> \"combinations\"\n",
"[OK] \"recording duties\" -> \"recording duties\"\n",
"[OK] \"formations dresses\" -> \"formations dresses\"\n",
"[ERR:9] \"investment spindles\" -> \"implement samples\"\n",
"[OK] \"goods\" -> \"goods\"\n",
"[OK] \"wings\" -> \"wings\"\n",
"[ERR:4] \"economies probabilities\" -> \"economies pracailties\"\n",
"[ERR:1] \"cares\" -> \"cores\"\n",
"[OK] \"effect\" -> \"effect\"\n",
"[OK] \"straighteners\" -> \"straighteners\"\n",
"[OK] \"boxcar turbines\" -> \"boxcar turbines\"\n",
"[OK] \"frequencies honors\" -> \"frequencies honors\"\n",
"[OK] \"armor smells\" -> \"armor smells\"\n",
"[OK] \"displays enemies\" -> \"displays enemies\"\n",
"[OK] \"puddles programs\" -> \"puddles programs\"\n",
"[ERR:5] \"medals figures\" -> \"medals fighting\"\n",
"[OK] \"commands shafts\" -> \"commands shafts\"\n",
"[OK] \"multiplications raises\" -> \"multiplications raises\"\n",
"[ERR:1] \"cure jack\" -> \"cure lack\"\n",
"[OK] \"selections\" -> \"selections\"\n",
"[OK] \"prisms coordinations\" -> \"prisms coordinations\"\n",
"[ERR:2] \"rain\" -> \"air\"\n",
"[OK] \"orders\" -> \"orders\"\n",
"[OK] \"duress painters\" -> \"duress painters\"\n",
"[OK] \"areas fire\" -> \"areas fire\"\n",
"[OK] \"nerve\" -> \"nerve\"\n",
"[OK] \"gasoline bulb\" -> \"gasoline bulb\"\n",
"[OK] \"turnarounds\" -> \"turnarounds\"\n",
"[OK] \"torpedo\" -> \"torpedo\"\n",
"[OK] \"condensers disk\" -> \"condensers disk\"\n",
"[OK] \"tops throat\" -> \"tops throat\"\n",
"[OK] \"milliliters\" -> \"milliliters\"\n",
"[OK] \"jelly\" -> \"jelly\"\n",
"[OK] \"missile prerequisite\" -> \"missile prerequisite\"\n",
"[OK] \"interviewer\" -> \"interviewer\"\n",
"[OK] \"taxi\" -> \"taxi\"\n",
"[ERR:1] \"mouth calorie\" -> \"mouth calories\"\n",
"[OK] \"coupling cashiers\" -> \"coupling cashiers\"\n",
"[OK] \"suspect ring\" -> \"suspect ring\"\n",
"[OK] \"permission\" -> \"permission\"\n",
"[OK] \"compressions nickels\" -> \"compressions nickels\"\n",
"[OK] \"hardcopy\" -> \"hardcopy\"\n",
"[OK] \"basement scratchpad\" -> \"basement scratchpad\"\n",
"[ERR:1] \"listings\" -> \"listing\"\n",
"[OK] \"folder\" -> \"folder\"\n",
"[OK] \"recapitulation rap\" -> \"recapitulation rap\"\n",
"[OK] \"fathom\" -> \"fathom\"\n",
"[ERR:4] \"leaps libraries\" -> \"leaps babies\"\n",
"[OK] \"hangar mouth\" -> \"hangar mouth\"\n",
"[OK] \"jars\" -> \"jars\"\n",
"[OK] \"stone\" -> \"stone\"\n",
"[OK] \"troubleshooter\" -> \"troubleshooter\"\n",
"[OK] \"pocket\" -> \"pocket\"\n",
"[ERR:1] \"parts saving\" -> \"part saving\"\n",
"[OK] \"mornings\" -> \"mornings\"\n",
"[OK] \"thumb pain\" -> \"thumb pain\"\n",
"[OK] \"videos glows\" -> \"videos glows\"\n",
"[OK] \"commands\" -> \"commands\"\n",
"[OK] \"skirt\" -> \"skirt\"\n",
"[OK] \"inspection need\" -> \"inspection need\"\n",
"[OK] \"medicine goals\" -> \"medicine goals\"\n",
"[OK] \"danger interiors\" -> \"danger interiors\"\n",
"[OK] \"poll\" -> \"poll\"\n",
"[OK] \"roadside religion\" -> \"roadside religion\"\n",
"[OK] \"decisions\" -> \"decisions\"\n",
"[OK] \"gland surges\" -> \"gland surges\"\n",
"[OK] \"mail warnings\" -> \"mail warnings\"\n",
"[OK] \"guards\" -> \"guards\"\n",
"[OK] \"draft\" -> \"draft\"\n",
"[OK] \"shops polices\" -> \"shops polices\"\n",
"[OK] \"pieces\" -> \"pieces\"\n",
"[OK] \"attitudes rheostats\" -> \"attitudes rheostats\"\n",
"[OK] \"waist pulls\" -> \"waist pulls\"\n",
"[OK] \"auditors firmware\" -> \"auditors firmware\"\n",
"[OK] \"breach\" -> \"breach\"\n",
"[OK] \"countries hoist\" -> \"countries hoist\"\n",
"[ERR:4] \"emitter reproduction\" -> \"emitter deduction\"\n",
"[OK] \"twin\" -> \"twin\"\n",
"[OK] \"song\" -> \"song\"\n",
"[OK] \"oar\" -> \"oar\"\n",
"[OK] \"rescue\" -> \"rescue\"\n",
"[OK] \"overvoltage\" -> \"overvoltage\"\n",
"[ERR:3] \"workbooks cycles\" -> \"workbooks codes\"\n",
"[OK] \"toolbox\" -> \"toolbox\"\n",
"[OK] \"packs leap\" -> \"packs leap\"\n",
"[ERR:1] \"differences\" -> \"difference\"\n",
"[OK] \"november\" -> \"november\"\n",
"[OK] \"vision places\" -> \"vision places\"\n",
"[OK] \"traces\" -> \"traces\"\n",
"[OK] \"stowage gland\" -> \"stowage gland\"\n",
"[ERR:2] \"reenlistments managements\" -> \"enlistments managements\"\n",
"[OK] \"preventions\" -> \"preventions\"\n",
"[OK] \"vomit\" -> \"vomit\"\n",
"[OK] \"sharpeners\" -> \"sharpeners\"\n",
"[OK] \"shirts combs\" -> \"shirts combs\"\n",
"[OK] \"moments importance\" -> \"moments importance\"\n",
"[OK] \"businesses sixes\" -> \"businesses sixes\"\n",
"[ERR:2] \"forecastle effects\" -> \"forecastle defects\"\n",
"[OK] \"investigators lead\" -> \"investigators lead\"\n",
"[OK] \"deduction inclines\" -> \"deduction inclines\"\n",
"[OK] \"possibilities\" -> \"possibilities\"\n",
"[OK] \"week\" -> \"week\"\n",
"[OK] \"transfer bolt\" -> \"transfer bolt\"\n",
"[ERR:1] \"bags allowances\" -> \"bags allowance\"\n",
"[OK] \"dominion cure\" -> \"dominion cure\"\n",
"[OK] \"calibrations marines\" -> \"calibrations marines\"\n",
"[OK] \"makes\" -> \"makes\"\n",
"[OK] \"swings\" -> \"swings\"\n",
"[OK] \"hatchet\" -> \"hatchet\"\n",
"[OK] \"aliases sentences\" -> \"aliases sentences\"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[OK] \"frost\" -> \"frost\"\n",
"[OK] \"rap bushes\" -> \"rap bushes\"\n",
"[OK] \"accusations minds\" -> \"accusations minds\"\n",
"[OK] \"maintenance propose\" -> \"maintenance propose\"\n",
"[ERR:3] \"tool overloads\" -> \"talk overloads\"\n",
"[OK] \"heights\" -> \"heights\"\n",
"[OK] \"conversion saying\" -> \"conversion saying\"\n",
"[OK] \"texts update\" -> \"texts update\"\n",
"[OK] \"attitude\" -> \"attitude\"\n",
"[OK] \"coils\" -> \"coils\"\n",
"[ERR:2] \"defections recognition\" -> \"deductions recognition\"\n",
"[OK] \"ensign clay\" -> \"ensign clay\"\n",
"[OK] \"swing\" -> \"swing\"\n",
"[OK] \"request eligibility\" -> \"request eligibility\"\n",
"[ERR:2] \"casualty aims\" -> \"casualty air\"\n",
"[OK] \"donors massed\" -> \"donors massed\"\n",
"[OK] \"log presents\" -> \"log presents\"\n",
"[ERR:2] \"photos conn\" -> \"photos can\"\n",
"[OK] \"apostrophe\" -> \"apostrophe\"\n",
"[OK] \"brothers\" -> \"brothers\"\n",
"[OK] \"boots schoolroom\" -> \"boots schoolroom\"\n",
"[OK] \"conference aptitude\" -> \"conference aptitude\"\n",
"[OK] \"splashes meetings\" -> \"splashes meetings\"\n",
"[OK] \"location\" -> \"location\"\n",
"[ERR:1] \"discount skills\" -> \"discount sills\"\n",
"[ERR:1] \"junction jurisdictions\" -> \"junction jurisdiction\"\n",
"[OK] \"accountability\" -> \"accountability\"\n",
"[OK] \"cones\" -> \"cones\"\n",
"[OK] \"utilizations\" -> \"utilizations\"\n",
"[OK] \"medals catalog\" -> \"medals catalog\"\n",
"[OK] \"exposure arraignments\" -> \"exposure arraignments\"\n",
"[OK] \"government\" -> \"government\"\n",
"[OK] \"settlements\" -> \"settlements\"\n",
"[OK] \"tube\" -> \"tube\"\n",
"[OK] \"clumps\" -> \"clumps\"\n",
"[OK] \"hardcopies\" -> \"hardcopies\"\n",
"[OK] \"windings collisions\" -> \"windings collisions\"\n",
"[OK] \"switch\" -> \"switch\"\n",
"[OK] \"ticks\" -> \"ticks\"\n",
"[OK] \"integer clouds\" -> \"integer clouds\"\n",
"[OK] \"intents\" -> \"intents\"\n",
"[OK] \"tire heater\" -> \"tire heater\"\n",
"[OK] \"beam\" -> \"beam\"\n",
"[OK] \"capture\" -> \"capture\"\n",
"[OK] \"outlines\" -> \"outlines\"\n",
"[OK] \"slot preference\" -> \"slot preference\"\n",
"[OK] \"crust\" -> \"crust\"\n",
"[OK] \"pointer\" -> \"pointer\"\n",
"[OK] \"jumps glaze\" -> \"jumps glaze\"\n",
"[OK] \"hopes\" -> \"hopes\"\n",
"[ERR:1] \"beginner revolutions\" -> \"beginner revolution\"\n",
"[OK] \"spade\" -> \"spade\"\n",
"[OK] \"temper ideal\" -> \"temper ideal\"\n",
"[OK] \"stowage\" -> \"stowage\"\n",
"[OK] \"oscillation ticks\" -> \"oscillation ticks\"\n",
"[OK] \"artilleries straw\" -> \"artilleries straw\"\n",
"[ERR:7] \"dispatches reproduction\" -> \"dispatches rproaces\"\n",
"[OK] \"authorization missions\" -> \"authorization missions\"\n",
"[OK] \"buckles\" -> \"buckles\"\n",
"[OK] \"agent\" -> \"agent\"\n",
"[OK] \"poles deductions\" -> \"poles deductions\"\n",
"[OK] \"propellers\" -> \"propellers\"\n",
"[OK] \"kicks\" -> \"kicks\"\n",
"[OK] \"piston discretion\" -> \"piston discretion\"\n",
"[OK] \"hairs exchange\" -> \"hairs exchange\"\n",
"[OK] \"releases cent\" -> \"releases cent\"\n",
"[OK] \"inceptions\" -> \"inceptions\"\n",
"[OK] \"augmentations frame\" -> \"augmentations frame\"\n",
"[OK] \"boilers\" -> \"boilers\"\n",
"[OK] \"bears visitor\" -> \"bears visitor\"\n",
"[OK] \"input\" -> \"input\"\n",
"[OK] \"expiration\" -> \"expiration\"\n",
"[OK] \"sidewalk automation\" -> \"sidewalk automation\"\n",
"[OK] \"durability workloads\" -> \"durability workloads\"\n",
"[OK] \"crews\" -> \"crews\"\n",
"[OK] \"beings\" -> \"beings\"\n",
"[OK] \"try\" -> \"try\"\n",
"[OK] \"suggestion banks\" -> \"suggestion banks\"\n",
"[OK] \"departures\" -> \"departures\"\n",
"[OK] \"shadow interrelation\" -> \"shadow interrelation\"\n",
"[OK] \"tons acquittal\" -> \"tons acquittal\"\n",
"[OK] \"detentions emitters\" -> \"detentions emitters\"\n",
"[OK] \"traces orifice\" -> \"traces orifice\"\n",
"[OK] \"entrance\" -> \"entrance\"\n",
"[ERR:2] \"humor\" -> \"human\"\n",
"[OK] \"prisoners body\" -> \"prisoners body\"\n",
"[ERR:9] \"helicopter perforator\" -> \"helicopter arcs\"\n",
"[OK] \"water adviser\" -> \"water adviser\"\n",
"[OK] \"jury fumes\" -> \"jury fumes\"\n",
"[OK] \"vapors welder\" -> \"vapors welder\"\n",
"[OK] \"posts sunlight\" -> \"posts sunlight\"\n",
"[OK] \"issues\" -> \"issues\"\n",
"[OK] \"searchlight\" -> \"searchlight\"\n",
"[OK] \"table\" -> \"table\"\n",
"[OK] \"semicolon alternations\" -> \"semicolon alternations\"\n",
"[OK] \"drunk\" -> \"drunk\"\n",
"[OK] \"resistance verses\" -> \"resistance verses\"\n",
"[OK] \"leads\" -> \"leads\"\n",
"[OK] \"batches zeros\" -> \"batches zeros\"\n",
"[OK] \"observations\" -> \"observations\"\n",
"[OK] \"quotas back\" -> \"quotas back\"\n",
"[OK] \"interpreter generations\" -> \"interpreter generations\"\n",
"[OK] \"molecules\" -> \"molecules\"\n",
"[OK] \"stocking dents\" -> \"stocking dents\"\n",
"[OK] \"mixtures appellate\" -> \"mixtures appellate\"\n",
"[OK] \"worksheets\" -> \"worksheets\"\n",
"[OK] \"meeting\" -> \"meeting\"\n",
"[OK] \"photodiodes\" -> \"photodiodes\"\n",
"[OK] \"suppression berths\" -> \"suppression berths\"\n",
"[OK] \"tension\" -> \"tension\"\n",
"[OK] \"associates\" -> \"associates\"\n",
"[OK] \"certificate route\" -> \"certificate route\"\n",
"[OK] \"secretary\" -> \"secretary\"\n",
"[OK] \"spars\" -> \"spars\"\n",
"[OK] \"seasons\" -> \"seasons\"\n",
"[OK] \"permission\" -> \"permission\"\n",
"[OK] \"loss\" -> \"loss\"\n",
"[ERR:2] \"yard escape\" -> \"award escape\"\n",
"[OK] \"soldiers benefits\" -> \"soldiers benefits\"\n",
"[OK] \"structure nails\" -> \"structure nails\"\n",
"[ERR:2] \"flare bracing\" -> \"care bracing\"\n",
"[OK] \"hardcopies\" -> \"hardcopies\"\n",
"[OK] \"bars\" -> \"bars\"\n",
"[OK] \"pupil\" -> \"pupil\"\n",
"[OK] \"calculators\" -> \"calculators\"\n",
"[OK] \"focus\" -> \"focus\"\n",
"[OK] \"november shears\" -> \"november shears\"\n",
"[OK] \"exhausts\" -> \"exhausts\"\n",
"[OK] \"legging\" -> \"legging\"\n",
"[OK] \"airspeeds staples\" -> \"airspeeds staples\"\n",
"[OK] \"checkers\" -> \"checkers\"\n",
"[OK] \"approvals vacuums\" -> \"approvals vacuums\"\n",
"[OK] \"ceramics increment\" -> \"ceramics increment\"\n",
"[OK] \"magnets watchstanding\" -> \"magnets watchstanding\"\n",
"[OK] \"lumps daughters\" -> \"lumps daughters\"\n",
"[OK] \"card rhythms\" -> \"card rhythms\"\n",
"[OK] \"slice difference\" -> \"slice difference\"\n",
"[OK] \"admiralties operabilities\" -> \"admiralties operabilities\"\n",
"[OK] \"assault\" -> \"assault\"\n",
"[OK] \"aviation\" -> \"aviation\"\n",
"[ERR:4] \"tin nonavailability\" -> \"nonavailability\"\n",
"[ERR:2] \"procurement mountain\" -> \"procurement fountains\"\n",
"[ERR:2] \"stake varactors\" -> \"stack varactors\"\n",
"[OK] \"cabs\" -> \"cabs\"\n",
"[OK] \"threads\" -> \"threads\"\n",
"[OK] \"escort\" -> \"escort\"\n",
"[ERR:2] \"bow symbol\" -> \"body symbol\"\n",
"[OK] \"heel fleet\" -> \"heel fleet\"\n",
"[OK] \"algorithms\" -> \"algorithms\"\n",
"[OK] \"elections hips\" -> \"elections hips\"\n",
"[OK] \"broom partitions\" -> \"broom partitions\"\n",
"[OK] \"tuesdays\" -> \"tuesdays\"\n",
"[OK] \"illustrations\" -> \"illustrations\"\n",
"[ERR:3] \"arrays glides\" -> \"arrays slits\"\n",
"[OK] \"helms\" -> \"helms\"\n",
"[OK] \"house\" -> \"house\"\n",
"[OK] \"sill semicolons\" -> \"sill semicolons\"\n",
"[OK] \"ceiling electrolytes\" -> \"ceiling electrolytes\"\n",
"[ERR:1] \"workbook swallows\" -> \"workbooks swallows\"\n",
"[OK] \"crewmember chairwoman\" -> \"crewmember chairwoman\"\n",
"[OK] \"agent supervisor\" -> \"agent supervisor\"\n",
"[OK] \"nods months\" -> \"nods months\"\n",
"[ERR:5] \"straightener teaspoon\" -> \"straightener grasps\"\n",
"[OK] \"concepts significance\" -> \"concepts significance\"\n",
"[ERR:2] \"selection fan\" -> \"selection cane\"\n",
"[OK] \"utilities bang\" -> \"utilities bang\"\n",
"[OK] \"forest\" -> \"forest\"\n",
"[OK] \"errors ax\" -> \"errors ax\"\n",
"[OK] \"owner\" -> \"owner\"\n",
"[OK] \"allegations chocks\" -> \"allegations chocks\"\n",
"[OK] \"hopes brass\" -> \"hopes brass\"\n",
"[OK] \"holder\" -> \"holder\"\n",
"[OK] \"subject shoes\" -> \"subject shoes\"\n",
"[OK] \"varieties output\" -> \"varieties output\"\n",
"[OK] \"section\" -> \"section\"\n",
"[OK] \"accident\" -> \"accident\"\n",
"[ERR:1] \"morning honors\" -> \"morning honor\"\n",
"[OK] \"destinations\" -> \"destinations\"\n",
"[ERR:2] \"captain force\" -> \"captain bore\"\n",
"[OK] \"veteran listings\" -> \"veteran listings\"\n",
"[OK] \"dose\" -> \"dose\"\n",
"[OK] \"yards\" -> \"yards\"\n",
"[ERR:1] \"ribs breezes\" -> \"rib breezes\"\n",
"[OK] \"inception admiralties\" -> \"inception admiralties\"\n",
"[OK] \"towns milestones\" -> \"towns milestones\"\n",
"[OK] \"advertisements\" -> \"advertisements\"\n",
"[OK] \"canals schoolroom\" -> \"canals schoolroom\"\n",
"[OK] \"probe houses\" -> \"probe houses\"\n",
"[OK] \"container sunlight\" -> \"container sunlight\"\n",
"[OK] \"sidewalk\" -> \"sidewalk\"\n",
"[ERR:1] \"berth restriction\" -> \"berth restrictions\"\n",
"[OK] \"slits\" -> \"slits\"\n",
"[OK] \"qualifications\" -> \"qualifications\"\n",
"[OK] \"change\" -> \"change\"\n",
"[ERR:1] \"discriminations injections\" -> \"discriminations infections\"\n",
"[OK] \"effectiveness\" -> \"effectiveness\"\n",
"[OK] \"sentences\" -> \"sentences\"\n",
"[OK] \"odor\" -> \"odor\"\n",
"[OK] \"deck\" -> \"deck\"\n",
"[OK] \"departments\" -> \"departments\"\n",
"[OK] \"factory\" -> \"factory\"\n",
"[OK] \"chimneys destroyer\" -> \"chimneys destroyer\"\n",
"[OK] \"lift picture\" -> \"lift picture\"\n",
"[OK] \"remains\" -> \"remains\"\n",
"[OK] \"mission\" -> \"mission\"\n",
"[OK] \"paygrade basis\" -> \"paygrade basis\"\n",
"[OK] \"restrictions\" -> \"restrictions\"\n",
"[OK] \"runaway\" -> \"runaway\"\n",
"[OK] \"recognitions\" -> \"recognitions\"\n",
"[OK] \"blade limitations\" -> \"blade limitations\"\n",
"[OK] \"horn\" -> \"horn\"\n",
"[OK] \"expenditures\" -> \"expenditures\"\n",
"[OK] \"variables self\" -> \"variables self\"\n",
"[OK] \"modification\" -> \"modification\"\n",
"[OK] \"drunkeness\" -> \"drunkeness\"\n",
"[OK] \"branches dozens\" -> \"branches dozens\"\n",
"[OK] \"auto\" -> \"auto\"\n",
"[OK] \"buoys conversion\" -> \"buoys conversion\"\n",
"[OK] \"combustion\" -> \"combustion\"\n",
"[OK] \"lime\" -> \"lime\"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[OK] \"batch\" -> \"batch\"\n",
"[OK] \"swords\" -> \"swords\"\n",
"[OK] \"deserts dispatchers\" -> \"deserts dispatchers\"\n",
"[OK] \"dispatcher\" -> \"dispatcher\"\n",
"[OK] \"outfit nurse\" -> \"outfit nurse\"\n",
"[OK] \"designators\" -> \"designators\"\n",
"[OK] \"hundred\" -> \"hundred\"\n",
"[OK] \"things\" -> \"things\"\n",
"[OK] \"door\" -> \"door\"\n",
"[ERR:2] \"grass\" -> \"mass\"\n",
"[OK] \"electrolyte serials\" -> \"electrolyte serials\"\n",
"[OK] \"approach parities\" -> \"approach parities\"\n",
"[OK] \"forks friction\" -> \"forks friction\"\n",
"[OK] \"model bats\" -> \"model bats\"\n",
"[OK] \"drill\" -> \"drill\"\n",
"[ERR:2] \"fifty\" -> \"city\"\n",
"[OK] \"calculators\" -> \"calculators\"\n",
"[OK] \"quality\" -> \"quality\"\n",
"[OK] \"payment\" -> \"payment\"\n",
"[OK] \"cap\" -> \"cap\"\n",
"[ERR:4] \"freshwater chalks\" -> \"freshwater bases\"\n",
"[OK] \"hut methods\" -> \"hut methods\"\n",
"[OK] \"cab\" -> \"cab\"\n",
"[OK] \"additions knob\" -> \"additions knob\"\n",
"[OK] \"limits evacuations\" -> \"limits evacuations\"\n",
"[OK] \"skirt\" -> \"skirt\"\n",
"[ERR:2] \"bullet thousand\" -> \"bullethousand\"\n",
"[ERR:3] \"chance\" -> \"chanecean\"\n",
"[OK] \"issue\" -> \"issue\"\n",
"[OK] \"detent\" -> \"detent\"\n",
"[OK] \"arm\" -> \"arm\"\n",
"[OK] \"dolly\" -> \"dolly\"\n",
"[OK] \"trial\" -> \"trial\"\n",
"[OK] \"trim\" -> \"trim\"\n",
"[OK] \"slices passes\" -> \"slices passes\"\n",
"[OK] \"recognitions peaks\" -> \"recognitions peaks\"\n",
"Batch: 7 / 8\n",
"Ground truth -> Recognized\n",
"[ERR:2] \"trees advantages\" -> \"ores advantages\"\n",
"[OK] \"brooks\" -> \"brooks\"\n",
"[ERR:5] \"wayside guidelines\" -> \"wayside eguidelay\"\n",
"[OK] \"screen\" -> \"screen\"\n",
"[OK] \"codes\" -> \"codes\"\n",
"[OK] \"steeples\" -> \"steeples\"\n",
"[OK] \"spar\" -> \"spar\"\n",
"[OK] \"sleeves\" -> \"sleeves\"\n",
"[OK] \"mine slices\" -> \"mine slices\"\n",
"[OK] \"family knot\" -> \"family knot\"\n",
"[OK] \"laundry substitutes\" -> \"laundry substitutes\"\n",
"[OK] \"focuses\" -> \"focuses\"\n",
"[OK] \"links propose\" -> \"links propose\"\n",
"[OK] \"couples hatchet\" -> \"couples hatchet\"\n",
"[OK] \"prisms gasket\" -> \"prisms gasket\"\n",
"[OK] \"tractor lock\" -> \"tractor lock\"\n",
"[OK] \"centerline\" -> \"centerline\"\n",
"[OK] \"leader\" -> \"leader\"\n",
"[OK] \"yaws heart\" -> \"yaws heart\"\n",
"[OK] \"rollout salts\" -> \"rollout salts\"\n",
"[OK] \"equations\" -> \"equations\"\n",
"[OK] \"conveniences\" -> \"conveniences\"\n",
"[OK] \"knob mattress\" -> \"knob mattress\"\n",
"[OK] \"finishes\" -> \"finishes\"\n",
"[ERR:1] \"maneuvers\" -> \"maneuver\"\n",
"[OK] \"pit roll\" -> \"pit roll\"\n",
"[OK] \"cashiers correlation\" -> \"cashiers correlation\"\n",
"[OK] \"fracture\" -> \"fracture\"\n",
"[OK] \"seams\" -> \"seams\"\n",
"[OK] \"bit\" -> \"bit\"\n",
"[OK] \"angles\" -> \"angles\"\n",
"[OK] \"malfunction\" -> \"malfunction\"\n",
"[OK] \"algorithms\" -> \"algorithms\"\n",
"[OK] \"securities clump\" -> \"securities clump\"\n",
"[OK] \"overvoltage\" -> \"overvoltage\"\n",
"[OK] \"splices outlines\" -> \"splices outlines\"\n",
"[OK] \"suction\" -> \"suction\"\n",
"[OK] \"width\" -> \"width\"\n",
"[OK] \"submission\" -> \"submission\"\n",
"[OK] \"countries\" -> \"countries\"\n",
"[OK] \"garages tilling\" -> \"garages tilling\"\n",
"[ERR:1] \"thought schematics\" -> \"thoughts schematics\"\n",
"[OK] \"bites\" -> \"bites\"\n",
"[ERR:2] \"spans twirl\" -> \"spans twig\"\n",
"[OK] \"trains\" -> \"trains\"\n",
"[OK] \"steam pockets\" -> \"steam pockets\"\n",
"[OK] \"calibration\" -> \"calibration\"\n",
"[OK] \"filters\" -> \"filters\"\n",
"[OK] \"regulations\" -> \"regulations\"\n",
"[OK] \"peck\" -> \"peck\"\n",
"[OK] \"orders plans\" -> \"orders plans\"\n",
"[OK] \"analogs bubble\" -> \"analogs bubble\"\n",
"[OK] \"jugs record\" -> \"jugs record\"\n",
"[OK] \"voltage\" -> \"voltage\"\n",
"[OK] \"lightning neutron\" -> \"lightning neutron\"\n",
"[ERR:3] \"cams\" -> \"arm\"\n",
"[ERR:2] \"attesting force\" -> \"attesting fork\"\n",
"[OK] \"cosals sheets\" -> \"cosals sheets\"\n",
"[OK] \"commanders\" -> \"commanders\"\n",
"[OK] \"swing investments\" -> \"swing investments\"\n",
"[ERR:3] \"offset apostrophe\" -> \"offer apostrophes\"\n",
"[OK] \"improvements\" -> \"improvements\"\n",
"[OK] \"experiences\" -> \"experiences\"\n",
"[OK] \"liver pick\" -> \"liver pick\"\n",
"[OK] \"slap annexs\" -> \"slap annexs\"\n",
"[OK] \"basket\" -> \"basket\"\n",
"[ERR:2] \"subprogram parcel\" -> \"subprogram pace\"\n",
"[OK] \"behaviors pilot\" -> \"behaviors pilot\"\n",
"[OK] \"worry\" -> \"worry\"\n",
"[OK] \"minuses dives\" -> \"minuses dives\"\n",
"[OK] \"color printouts\" -> \"color printouts\"\n",
"[ERR:1] \"conjunctions painter\" -> \"conjunctions painters\"\n",
"[OK] \"suction\" -> \"suction\"\n",
"[OK] \"sirs\" -> \"sirs\"\n",
"[OK] \"forecastle diesel\" -> \"forecastle diesel\"\n",
"[OK] \"recognitions\" -> \"recognitions\"\n",
"[OK] \"counsels\" -> \"counsels\"\n",
"[OK] \"rag impulses\" -> \"rag impulses\"\n",
"[OK] \"evaluations\" -> \"evaluations\"\n",
"[ERR:3] \"calibrations environments\" -> \"calibrations eavionmens\"\n",
"[OK] \"intensity\" -> \"intensity\"\n",
"[OK] \"firings guide\" -> \"firings guide\"\n",
"[OK] \"rescuer hyphen\" -> \"rescuer hyphen\"\n",
"[OK] \"rifling journey\" -> \"rifling journey\"\n",
"[OK] \"examinations flaps\" -> \"examinations flaps\"\n",
"[OK] \"bed commas\" -> \"bed commas\"\n",
"[OK] \"trust members\" -> \"trust members\"\n",
"[OK] \"affiants\" -> \"affiants\"\n",
"[OK] \"printout dive\" -> \"printout dive\"\n",
"[OK] \"assembly menus\" -> \"assembly menus\"\n",
"[OK] \"march alloy\" -> \"march alloy\"\n",
"[OK] \"action ray\" -> \"action ray\"\n",
"[OK] \"stair\" -> \"stair\"\n",
"[OK] \"tops work\" -> \"tops work\"\n",
"[OK] \"drill\" -> \"drill\"\n",
"[OK] \"chapter intakes\" -> \"chapter intakes\"\n",
"[OK] \"decisions\" -> \"decisions\"\n",
"[ERR:8] \"dependencies plexiglass\" -> \"dependencies peck\"\n",
"[OK] \"compliances\" -> \"compliances\"\n",
"[OK] \"tacks\" -> \"tacks\"\n",
"[OK] \"places breath\" -> \"places breath\"\n",
"[OK] \"sentence\" -> \"sentence\"\n",
"[OK] \"clericals\" -> \"clericals\"\n",
"[OK] \"deal\" -> \"deal\"\n",
"[OK] \"arc\" -> \"arc\"\n",
"[OK] \"gulfs matters\" -> \"gulfs matters\"\n",
"[OK] \"injectors\" -> \"injectors\"\n",
"[OK] \"allotment\" -> \"allotment\"\n",
"[OK] \"strikers horizon\" -> \"strikers horizon\"\n",
"[OK] \"cords\" -> \"cords\"\n",
"[OK] \"preliminaries division\" -> \"preliminaries division\"\n",
"[ERR:4] \"spacer movements\" -> \"spacer movers\"\n",
"[OK] \"thunder junk\" -> \"thunder junk\"\n",
"[OK] \"executions alcohol\" -> \"executions alcohol\"\n",
"[OK] \"carburetor\" -> \"carburetor\"\n",
"[ERR:1] \"counsels addressees\" -> \"counsels addresses\"\n",
"[OK] \"seams\" -> \"seams\"\n",
"[OK] \"much\" -> \"much\"\n",
"[OK] \"runs receiver\" -> \"runs receiver\"\n",
"[OK] \"alternate ditto\" -> \"alternate ditto\"\n",
"[OK] \"hitch\" -> \"hitch\"\n",
"[ERR:4] \"symbol routes\" -> \"bomb routes\"\n",
"[OK] \"gases goal\" -> \"gases goal\"\n",
"[OK] \"fighter embosses\" -> \"fighter embosses\"\n",
"[OK] \"americans islands\" -> \"americans islands\"\n",
"[OK] \"complaints equipment\" -> \"complaints equipment\"\n",
"[OK] \"residue\" -> \"residue\"\n",
"[OK] \"component\" -> \"component\"\n",
"[ERR:1] \"shot elapses\" -> \"shoe elapses\"\n",
"[ERR:2] \"writing knock\" -> \"writing knot\"\n",
"[OK] \"flicker\" -> \"flicker\"\n",
"[OK] \"warehouses\" -> \"warehouses\"\n",
"[OK] \"airport\" -> \"airport\"\n",
"[OK] \"specialist\" -> \"specialist\"\n",
"[OK] \"wardrooms\" -> \"wardrooms\"\n",
"[OK] \"worksheet\" -> \"worksheet\"\n",
"[OK] \"injection\" -> \"injection\"\n",
"[ERR:3] \"topping\" -> \"damping\"\n",
"[OK] \"dares\" -> \"dares\"\n",
"[OK] \"references bytes\" -> \"references bytes\"\n",
"[OK] \"talk\" -> \"talk\"\n",
"[ERR:1] \"top\" -> \"ton\"\n",
"[OK] \"alternation web\" -> \"alternation web\"\n",
"[OK] \"poll\" -> \"poll\"\n",
"[OK] \"cheeks\" -> \"cheeks\"\n",
"[OK] \"theories\" -> \"theories\"\n",
"[OK] \"counts projectiles\" -> \"counts projectiles\"\n",
"[OK] \"respects\" -> \"respects\"\n",
"[ERR:3] \"closure echoes\" -> \"closure choke\"\n",
"[OK] \"leather\" -> \"leather\"\n",
"[OK] \"can impedance\" -> \"can impedance\"\n",
"[OK] \"marbles fastener\" -> \"marbles fastener\"\n",
"[OK] \"silk films\" -> \"silk films\"\n",
"[OK] \"forehead\" -> \"forehead\"\n",
"[ERR:5] \"checkpoints sirs\" -> \"checkpoints\"\n",
"[OK] \"tissue\" -> \"tissue\"\n",
"[OK] \"pints beginners\" -> \"pints beginners\"\n",
"[OK] \"matter watt\" -> \"matter watt\"\n",
"[OK] \"runaways\" -> \"runaways\"\n",
"[OK] \"liquors\" -> \"liquors\"\n",
"[OK] \"option\" -> \"option\"\n",
"[OK] \"rotation restraints\" -> \"rotation restraints\"\n",
"[OK] \"heats possibility\" -> \"heats possibility\"\n",
"[OK] \"atmosphere moistures\" -> \"atmosphere moistures\"\n",
"[OK] \"river altimeter\" -> \"river altimeter\"\n",
"[OK] \"ranks\" -> \"ranks\"\n",
"[OK] \"compartments\" -> \"compartments\"\n",
"[OK] \"society\" -> \"society\"\n",
"[ERR:4] \"implementation weld\" -> \"implementation care\"\n",
"[OK] \"sweepers steam\" -> \"sweepers steam\"\n",
"[OK] \"mode\" -> \"mode\"\n",
"[OK] \"barometer\" -> \"barometer\"\n",
"[OK] \"bowls fronts\" -> \"bowls fronts\"\n",
"[OK] \"compromise\" -> \"compromise\"\n",
"[OK] \"navigators\" -> \"navigators\"\n",
"[OK] \"fastener\" -> \"fastener\"\n",
"[OK] \"breaks try\" -> \"breaks try\"\n",
"[OK] \"airplane radiator\" -> \"airplane radiator\"\n",
"[OK] \"depletion mists\" -> \"depletion mists\"\n",
"[OK] \"slices waterline\" -> \"slices waterline\"\n",
"[OK] \"structures grade\" -> \"structures grade\"\n",
"[OK] \"hub\" -> \"hub\"\n",
"[OK] \"guilt\" -> \"guilt\"\n",
"[OK] \"firer tab\" -> \"firer tab\"\n",
"[OK] \"swimmers\" -> \"swimmers\"\n",
"[OK] \"prefix rowers\" -> \"prefix rowers\"\n",
"[OK] \"quarters\" -> \"quarters\"\n",
"[OK] \"washer alarm\" -> \"washer alarm\"\n",
"[OK] \"forty net\" -> \"forty net\"\n",
"[OK] \"october commissions\" -> \"october commissions\"\n",
"[OK] \"shock lift\" -> \"shock lift\"\n",
"[OK] \"wood photographs\" -> \"wood photographs\"\n",
"[OK] \"disadvantage bulk\" -> \"disadvantage bulk\"\n",
"[OK] \"winch butts\" -> \"winch butts\"\n",
"[OK] \"committees\" -> \"committees\"\n",
"[OK] \"sessions time\" -> \"sessions time\"\n",
"[OK] \"direction\" -> \"direction\"\n",
"[OK] \"illustrations conjecture\" -> \"illustrations conjecture\"\n",
"[ERR:3] \"additions gyro\" -> \"additions crop\"\n",
"[OK] \"stub\" -> \"stub\"\n",
"[ERR:6] \"sponsor\" -> \"cearnmr\"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[OK] \"fits shovel\" -> \"fits shovel\"\n",
"[OK] \"tanks harmony\" -> \"tanks harmony\"\n",
"[OK] \"fumes\" -> \"fumes\"\n",
"[OK] \"thought\" -> \"thought\"\n",
"[OK] \"nation\" -> \"nation\"\n",
"[OK] \"packs\" -> \"packs\"\n",
"[ERR:1] \"chatter disability\" -> \"chapter disability\"\n",
"[OK] \"conversion\" -> \"conversion\"\n",
"[OK] \"arrivals thumb\" -> \"arrivals thumb\"\n",
"[OK] \"developments modification\" -> \"developments modification\"\n",
"[OK] \"representatives\" -> \"representatives\"\n",
"[OK] \"quiet\" -> \"quiet\"\n",
"[OK] \"secretary\" -> \"secretary\"\n",
"[OK] \"chattels curtain\" -> \"chattels curtain\"\n",
"[OK] \"honors\" -> \"honors\"\n",
"[ERR:2] \"legging subfunctions\" -> \"leaving subfunctions\"\n",
"[ERR:2] \"multimeter loudspeaker\" -> \"altimeter loudspeaker\"\n",
"[ERR:1] \"airs\" -> \"air\"\n",
"[OK] \"bushes square\" -> \"bushes square\"\n",
"[OK] \"terrain toss\" -> \"terrain toss\"\n",
"[ERR:3] \"makeup drainage\" -> \"makeup drain\"\n",
"[OK] \"cuts\" -> \"cuts\"\n",
"[OK] \"boil\" -> \"boil\"\n",
"[ERR:2] \"mess\" -> \"men\"\n",
"[ERR:5] \"extension purge\" -> \"extension owner\"\n",
"[OK] \"space\" -> \"space\"\n",
"[OK] \"million lock\" -> \"million lock\"\n",
"[OK] \"resistors\" -> \"resistors\"\n",
"[OK] \"catalogs\" -> \"catalogs\"\n",
"[OK] \"stern inceptions\" -> \"stern inceptions\"\n",
"[OK] \"alignments groves\" -> \"alignments groves\"\n",
"[OK] \"discounts barometer\" -> \"discounts barometer\"\n",
"[OK] \"azimuth orifices\" -> \"azimuth orifices\"\n",
"[OK] \"shocks\" -> \"shocks\"\n",
"[ERR:3] \"resource terminologies\" -> \"resource terminology\"\n",
"[OK] \"raps\" -> \"raps\"\n",
"[OK] \"printouts dozens\" -> \"printouts dozens\"\n",
"[OK] \"status\" -> \"status\"\n",
"[ERR:5] \"curtain beams\" -> \"curtain crust\"\n",
"[OK] \"schoolrooms elapse\" -> \"schoolrooms elapse\"\n",
"[OK] \"tomorrow rejections\" -> \"tomorrow rejections\"\n",
"[OK] \"composition\" -> \"composition\"\n",
"[OK] \"helicopters\" -> \"helicopters\"\n",
"[OK] \"summers dioxides\" -> \"summers dioxides\"\n",
"[OK] \"cleats\" -> \"cleats\"\n",
"[OK] \"yard\" -> \"yard\"\n",
"[OK] \"bell artillery\" -> \"bell artillery\"\n",
"[OK] \"capitals cork\" -> \"capitals cork\"\n",
"[OK] \"combatants disgust\" -> \"combatants disgust\"\n",
"[OK] \"positions neutrons\" -> \"positions neutrons\"\n",
"[OK] \"clocks strip\" -> \"clocks strip\"\n",
"[ERR:8] \"highline ride\" -> \"uqiune file\"\n",
"[OK] \"box\" -> \"box\"\n",
"[OK] \"poison trays\" -> \"poison trays\"\n",
"[OK] \"conversion\" -> \"conversion\"\n",
"[OK] \"fuel alert\" -> \"fuel alert\"\n",
"[OK] \"cough races\" -> \"cough races\"\n",
"[OK] \"notices turns\" -> \"notices turns\"\n",
"[OK] \"education\" -> \"education\"\n",
"[ERR:1] \"webs\" -> \"web\"\n",
"[ERR:3] \"noises personnel\" -> \"noises person\"\n",
"[OK] \"fifteen adhesives\" -> \"fifteen adhesives\"\n",
"[OK] \"fountains\" -> \"fountains\"\n",
"[OK] \"worry\" -> \"worry\"\n",
"[OK] \"authorization\" -> \"authorization\"\n",
"[OK] \"decoder\" -> \"decoder\"\n",
"[OK] \"dress displays\" -> \"dress displays\"\n",
"[OK] \"subprogram\" -> \"subprogram\"\n",
"[OK] \"points\" -> \"points\"\n",
"[OK] \"ease\" -> \"ease\"\n",
"[OK] \"overload\" -> \"overload\"\n",
"[ERR:2] \"alternate coast\" -> \"alternate coats\"\n",
"[OK] \"event\" -> \"event\"\n",
"[OK] \"twig\" -> \"twig\"\n",
"[OK] \"carriage\" -> \"carriage\"\n",
"[ERR:5] \"hump lookout\" -> \"hump lake\"\n",
"[OK] \"chapters warranties\" -> \"chapters warranties\"\n",
"[OK] \"fall attesting\" -> \"fall attesting\"\n",
"[OK] \"lamp\" -> \"lamp\"\n",
"[OK] \"teeth\" -> \"teeth\"\n",
"[OK] \"selectors\" -> \"selectors\"\n",
"[OK] \"radars\" -> \"radars\"\n",
"[OK] \"procedures\" -> \"procedures\"\n",
"[OK] \"maintainability\" -> \"maintainability\"\n",
"[OK] \"sixes tunnel\" -> \"sixes tunnel\"\n",
"[OK] \"minuses villages\" -> \"minuses villages\"\n",
"[OK] \"dress\" -> \"dress\"\n",
"[OK] \"arrest\" -> \"arrest\"\n",
"[OK] \"horn strip\" -> \"horn strip\"\n",
"[OK] \"tumble section\" -> \"tumble section\"\n",
"[OK] \"ball broom\" -> \"ball broom\"\n",
"[OK] \"thickness cranks\" -> \"thickness cranks\"\n",
"[ERR:4] \"decoration pens\" -> \"decoration ax\"\n",
"[OK] \"currencies delegates\" -> \"currencies delegates\"\n",
"[OK] \"justice\" -> \"justice\"\n",
"[OK] \"scabs\" -> \"scabs\"\n",
"[OK] \"buys nickels\" -> \"buys nickels\"\n",
"[ERR:7] \"width learning\" -> \"winthig being\"\n",
"[OK] \"applications document\" -> \"applications document\"\n",
"[OK] \"pans\" -> \"pans\"\n",
"[OK] \"rotation remains\" -> \"rotation remains\"\n",
"[OK] \"trip\" -> \"trip\"\n",
"[OK] \"mailboxes\" -> \"mailboxes\"\n",
"[OK] \"mercury\" -> \"mercury\"\n",
"[OK] \"quiet\" -> \"quiet\"\n",
"[OK] \"tunnels boilers\" -> \"tunnels boilers\"\n",
"[OK] \"dissemination diameters\" -> \"dissemination diameters\"\n",
"[OK] \"mint destroyer\" -> \"mint destroyer\"\n",
"[OK] \"researchers\" -> \"researchers\"\n",
"[ERR:5] \"bulkhead carbons\" -> \"bulkhead area\"\n",
"[OK] \"minute commands\" -> \"minute commands\"\n",
"[OK] \"octobers identification\" -> \"octobers identification\"\n",
"[OK] \"sponges motions\" -> \"sponges motions\"\n",
"[OK] \"emergency pile\" -> \"emergency pile\"\n",
"[OK] \"alloys\" -> \"alloys\"\n",
"[OK] \"barrel location\" -> \"barrel location\"\n",
"[OK] \"strain antenna\" -> \"strain antenna\"\n",
"[OK] \"technique additive\" -> \"technique additive\"\n",
"[OK] \"gunfire groan\" -> \"gunfire groan\"\n",
"[ERR:2] \"dam\" -> \"can\"\n",
"[OK] \"swaps curve\" -> \"swaps curve\"\n",
"[OK] \"libraries toothpick\" -> \"libraries toothpick\"\n",
"[OK] \"sock\" -> \"sock\"\n",
"[OK] \"sole perforations\" -> \"sole perforations\"\n",
"[OK] \"math\" -> \"math\"\n",
"[ERR:2] \"splitter uniforms\" -> \"splicer uniforms\"\n",
"[OK] \"pressures header\" -> \"pressures header\"\n",
"[OK] \"love\" -> \"love\"\n",
"[OK] \"concurrence\" -> \"concurrence\"\n",
"[ERR:4] \"theories pitch\" -> \"theories liters\"\n",
"[OK] \"return\" -> \"return\"\n",
"[OK] \"boresight disabilities\" -> \"boresight disabilities\"\n",
"[ERR:4] \"clerks helmsmen\" -> \"clerks helm\"\n",
"[OK] \"glass\" -> \"glass\"\n",
"[OK] \"cruise spoke\" -> \"cruise spoke\"\n",
"[OK] \"station contributions\" -> \"station contributions\"\n",
"[OK] \"attack\" -> \"attack\"\n",
"[OK] \"cheeses\" -> \"cheeses\"\n",
"[ERR:1] \"type beads\" -> \"typebeads\"\n",
"[OK] \"corrections\" -> \"corrections\"\n",
"[OK] \"pair\" -> \"pair\"\n",
"[OK] \"departures\" -> \"departures\"\n",
"[OK] \"furs\" -> \"furs\"\n",
"[OK] \"drillers operators\" -> \"drillers operators\"\n",
"[OK] \"expiration\" -> \"expiration\"\n",
"[OK] \"sports muscle\" -> \"sports muscle\"\n",
"[OK] \"ocean toothpick\" -> \"ocean toothpick\"\n",
"[OK] \"liquors\" -> \"liquors\"\n",
"[OK] \"compressions\" -> \"compressions\"\n",
"[OK] \"art\" -> \"art\"\n",
"[OK] \"arrests\" -> \"arrests\"\n",
"[OK] \"servo\" -> \"servo\"\n",
"[OK] \"vicinity hours\" -> \"vicinity hours\"\n",
"[OK] \"return\" -> \"return\"\n",
"[OK] \"labors\" -> \"labors\"\n",
"[OK] \"grains\" -> \"grains\"\n",
"[OK] \"friends\" -> \"friends\"\n",
"[OK] \"runners\" -> \"runners\"\n",
"[OK] \"combinations lump\" -> \"combinations lump\"\n",
"[OK] \"asterisks\" -> \"asterisks\"\n",
"[ERR:2] \"chairwomen boosts\" -> \"chairwomen boats\"\n",
"[OK] \"lights stencil\" -> \"lights stencil\"\n",
"[OK] \"fuses conn\" -> \"fuses conn\"\n",
"[OK] \"armful\" -> \"armful\"\n",
"[OK] \"latitudes\" -> \"latitudes\"\n",
"[OK] \"aggravations toothpick\" -> \"aggravations toothpick\"\n",
"[OK] \"interruption conjectures\" -> \"interruption conjectures\"\n",
"[ERR:1] \"designations\" -> \"designation\"\n",
"[OK] \"tunnels flash\" -> \"tunnels flash\"\n",
"[OK] \"wing subtotals\" -> \"wing subtotals\"\n",
"[ERR:3] \"buzz\" -> \"bag\"\n",
"[OK] \"sixties twirls\" -> \"sixties twirls\"\n",
"[OK] \"engines\" -> \"engines\"\n",
"[OK] \"series apportionments\" -> \"series apportionments\"\n",
"[OK] \"permit\" -> \"permit\"\n",
"[OK] \"elements\" -> \"elements\"\n",
"[OK] \"safeguard\" -> \"safeguard\"\n",
"[OK] \"buoy nerves\" -> \"buoy nerves\"\n",
"[OK] \"yaw cap\" -> \"yaw cap\"\n",
"[OK] \"teaspoons\" -> \"teaspoons\"\n",
"[OK] \"seamanship\" -> \"seamanship\"\n",
"[OK] \"leave\" -> \"leave\"\n",
"[OK] \"gang sweeper\" -> \"gang sweeper\"\n",
"[OK] \"washtub\" -> \"washtub\"\n",
"[OK] \"firearm\" -> \"firearm\"\n",
"[OK] \"messages\" -> \"messages\"\n",
"[OK] \"demonstrations bows\" -> \"demonstrations bows\"\n",
"[OK] \"things rinses\" -> \"things rinses\"\n",
"[OK] \"airports facepieces\" -> \"airports facepieces\"\n",
"[OK] \"readers\" -> \"readers\"\n",
"[OK] \"ton tailor\" -> \"ton tailor\"\n",
"[OK] \"libraries\" -> \"libraries\"\n",
"[OK] \"variety activities\" -> \"variety activities\"\n",
"[OK] \"aluminums\" -> \"aluminums\"\n",
"[OK] \"tests yaw\" -> \"tests yaw\"\n",
"[OK] \"wrap nuts\" -> \"wrap nuts\"\n",
"[ERR:1] \"platforms\" -> \"platform\"\n",
"[OK] \"comparison\" -> \"comparison\"\n",
"[ERR:5] \"swab hug\" -> \"swab flame\"\n",
"[OK] \"cloths\" -> \"cloths\"\n",
"[OK] \"registers lee\" -> \"registers lee\"\n",
"[OK] \"explosion watts\" -> \"explosion watts\"\n",
"[ERR:4] \"object glows\" -> \"act glows\"\n",
"[OK] \"meter\" -> \"meter\"\n",
"[OK] \"privileges hospital\" -> \"privileges hospital\"\n",
"[OK] \"briefing\" -> \"briefing\"\n",
"[OK] \"bat\" -> \"bat\"\n",
"[OK] \"analyses\" -> \"analyses\"\n",
"[OK] \"interference detents\" -> \"interference detents\"\n",
"[OK] \"ivory experiences\" -> \"ivory experiences\"\n",
"[ERR:2] \"laundry bolts\" -> \"laundry blots\"\n",
"[OK] \"load software\" -> \"load software\"\n",
"[OK] \"transmission component\" -> \"transmission component\"\n",
"[OK] \"personalities recruit\" -> \"personalities recruit\"\n",
"[OK] \"lints threaders\" -> \"lints threaders\"\n",
"[OK] \"waists highways\" -> \"waists highways\"\n",
"[ERR:2] \"human pot\" -> \"hum pot\"\n",
"[OK] \"electrode processors\" -> \"electrode processors\"\n",
"[OK] \"audits\" -> \"audits\"\n",
"[OK] \"leap business\" -> \"leap business\"\n",
"[OK] \"quarters connection\" -> \"quarters connection\"\n",
"[OK] \"couples\" -> \"couples\"\n",
"[OK] \"energy\" -> \"energy\"\n",
"[OK] \"antenna\" -> \"antenna\"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[OK] \"daughter grooves\" -> \"daughter grooves\"\n",
"[OK] \"caliber\" -> \"caliber\"\n",
"[OK] \"ounces barometer\" -> \"ounces barometer\"\n",
"[OK] \"yaws\" -> \"yaws\"\n",
"[OK] \"soils storage\" -> \"soils storage\"\n",
"[ERR:1] \"clearances\" -> \"clearance\"\n",
"[ERR:3] \"personalities impact\" -> \"personalities ipatcts\"\n",
"[OK] \"methodology\" -> \"methodology\"\n",
"[OK] \"torque smell\" -> \"torque smell\"\n",
"[OK] \"drainer deck\" -> \"drainer deck\"\n",
"[OK] \"wave\" -> \"wave\"\n",
"[OK] \"times\" -> \"times\"\n",
"[OK] \"needle cathode\" -> \"needle cathode\"\n",
"[ERR:4] \"guesses growths\" -> \"guesses glow\"\n",
"[ERR:2] \"sailor fork\" -> \"sailor fog\"\n",
"[ERR:3] \"substance residues\" -> \"substance rides\"\n",
"[ERR:2] \"governors coast\" -> \"governors coal\"\n",
"[OK] \"complaint desk\" -> \"complaint desk\"\n",
"[OK] \"orange\" -> \"orange\"\n",
"[OK] \"accusations\" -> \"accusations\"\n",
"[OK] \"racks\" -> \"racks\"\n",
"[OK] \"law sons\" -> \"law sons\"\n",
"[OK] \"mistrial rim\" -> \"mistrial rim\"\n",
"[OK] \"ray field\" -> \"ray field\"\n",
"[OK] \"wire revision\" -> \"wire revision\"\n",
"[OK] \"males\" -> \"males\"\n",
"[OK] \"automobile\" -> \"automobile\"\n",
"[OK] \"beads gleams\" -> \"beads gleams\"\n",
"[ERR:1] \"comforts\" -> \"comfort\"\n",
"[OK] \"gum\" -> \"gum\"\n",
"[OK] \"failures notation\" -> \"failures notation\"\n",
"[OK] \"arrest\" -> \"arrest\"\n",
"[ERR:2] \"rose benches\" -> \"rose bench\"\n",
"[OK] \"accruals\" -> \"accruals\"\n",
"[OK] \"apparatus slots\" -> \"apparatus slots\"\n",
"[OK] \"recoveries\" -> \"recoveries\"\n",
"[OK] \"manuals satellite\" -> \"manuals satellite\"\n",
"[OK] \"elections\" -> \"elections\"\n",
"[OK] \"trails\" -> \"trails\"\n",
"[OK] \"legends exhaust\" -> \"legends exhaust\"\n",
"[OK] \"pits\" -> \"pits\"\n",
"[OK] \"rumble slap\" -> \"rumble slap\"\n",
"[OK] \"apples future\" -> \"apples future\"\n",
"[OK] \"waters horizon\" -> \"waters horizon\"\n",
"[ERR:8] \"techniques preservation\" -> \"techniques eraser\"\n",
"[OK] \"arrays\" -> \"arrays\"\n",
"[OK] \"movers combustion\" -> \"movers combustion\"\n",
"[OK] \"fake dish\" -> \"fake dish\"\n",
"[OK] \"flag\" -> \"flag\"\n",
"[OK] \"refrigerator\" -> \"refrigerator\"\n",
"[OK] \"males poles\" -> \"males poles\"\n",
"[OK] \"mines\" -> \"mines\"\n",
"[OK] \"fractures\" -> \"fractures\"\n",
"[OK] \"authorizations bandage\" -> \"authorizations bandage\"\n",
"[OK] \"types eleven\" -> \"types eleven\"\n",
"[OK] \"illustrations\" -> \"illustrations\"\n",
"[OK] \"adverbs ohms\" -> \"adverbs ohms\"\n",
"[OK] \"language drums\" -> \"language drums\"\n",
"[OK] \"hill score\" -> \"hill score\"\n",
"[OK] \"investments\" -> \"investments\"\n",
"[OK] \"parachutes maximum\" -> \"parachutes maximum\"\n",
"[OK] \"hiss\" -> \"hiss\"\n",
"[OK] \"sale donors\" -> \"sale donors\"\n",
"[OK] \"classroom\" -> \"classroom\"\n",
"[OK] \"dare sparks\" -> \"dare sparks\"\n",
"[OK] \"substitutes cloth\" -> \"substitutes cloth\"\n",
"[OK] \"account intakes\" -> \"account intakes\"\n",
"[OK] \"periods puncture\" -> \"periods puncture\"\n",
"[OK] \"scopes\" -> \"scopes\"\n",
"[OK] \"trims tabs\" -> \"trims tabs\"\n",
"[OK] \"pointer births\" -> \"pointer births\"\n",
"[OK] \"boxes stomach\" -> \"boxes stomach\"\n",
"[OK] \"labor\" -> \"labor\"\n",
"[OK] \"stamps\" -> \"stamps\"\n",
"[OK] \"butt generals\" -> \"butt generals\"\n",
"Batch: 8 / 8\n",
"Ground truth -> Recognized\n",
"[OK] \"world\" -> \"world\"\n",
"[OK] \"cars\" -> \"cars\"\n",
"[OK] \"interiors\" -> \"interiors\"\n",
"[OK] \"vapor\" -> \"vapor\"\n",
"[OK] \"decontamination\" -> \"decontamination\"\n",
"[OK] \"hauls tops\" -> \"hauls tops\"\n",
"[OK] \"directories eleven\" -> \"directories eleven\"\n",
"[OK] \"abettor dictionary\" -> \"abettor dictionary\"\n",
"[OK] \"kills thickness\" -> \"kills thickness\"\n",
"[OK] \"leaper\" -> \"leaper\"\n",
"[OK] \"ribbons\" -> \"ribbons\"\n",
"[OK] \"affair setup\" -> \"affair setup\"\n",
"[OK] \"beams\" -> \"beams\"\n",
"[OK] \"compilers\" -> \"compilers\"\n",
"[OK] \"slashes payment\" -> \"slashes payment\"\n",
"[ERR:4] \"tabulation electrician\" -> \"tabulation ectrcicn\"\n",
"[OK] \"polarities\" -> \"polarities\"\n",
"[OK] \"implement\" -> \"implement\"\n",
"[ERR:5] \"tourniquet closure\" -> \"tourniquet chests\"\n",
"[OK] \"wear\" -> \"wear\"\n",
"[OK] \"lieutenants\" -> \"lieutenants\"\n",
"[ERR:8] \"emergency\" -> \"gomrorer\"\n",
"[OK] \"sectors judges\" -> \"sectors judges\"\n",
"[ERR:3] \"economy recruiters\" -> \"economy recruit\"\n",
"[OK] \"leakage\" -> \"leakage\"\n",
"[OK] \"flags\" -> \"flags\"\n",
"[OK] \"amounts silence\" -> \"amounts silence\"\n",
"[ERR:3] \"sewage establishment\" -> \"sevadr establishment\"\n",
"[OK] \"impact\" -> \"impact\"\n",
"[OK] \"sweeps\" -> \"sweeps\"\n",
"[ERR:2] \"oak compensations\" -> \"dock compensations\"\n",
"[OK] \"squares\" -> \"squares\"\n",
"[OK] \"sun shortages\" -> \"sun shortages\"\n",
"[ERR:3] \"inquiry\" -> \"ircwiry\"\n",
"[OK] \"console blot\" -> \"console blot\"\n",
"[ERR:1] \"drawer restaurants\" -> \"drawer restaurant\"\n",
"[OK] \"cans\" -> \"cans\"\n",
"[OK] \"discovery lane\" -> \"discovery lane\"\n",
"[OK] \"polarities interest\" -> \"polarities interest\"\n",
"[OK] \"pencils painting\" -> \"pencils painting\"\n",
"[OK] \"barge search\" -> \"barge search\"\n",
"[OK] \"thursday emitters\" -> \"thursday emitters\"\n",
"[ERR:5] \"projects bulkheads\" -> \"projects bulk\"\n",
"[OK] \"swim\" -> \"swim\"\n",
"[OK] \"difference\" -> \"difference\"\n",
"[OK] \"dimension jumpers\" -> \"dimension jumpers\"\n",
"[OK] \"community dye\" -> \"community dye\"\n",
"[OK] \"resistor gravity\" -> \"resistor gravity\"\n",
"[OK] \"deal\" -> \"deal\"\n",
"[OK] \"hums\" -> \"hums\"\n",
"[OK] \"chemical\" -> \"chemical\"\n",
"[OK] \"freights compressions\" -> \"freights compressions\"\n",
"[OK] \"pond\" -> \"pond\"\n",
"[OK] \"eighties\" -> \"eighties\"\n",
"[OK] \"headset\" -> \"headset\"\n",
"[OK] \"recruits\" -> \"recruits\"\n",
"[OK] \"war\" -> \"war\"\n",
"[OK] \"marks mount\" -> \"marks mount\"\n",
"[OK] \"bails cosals\" -> \"bails cosals\"\n",
"[OK] \"governments\" -> \"governments\"\n",
"[ERR:2] \"boat tin\" -> \"boat ring\"\n",
"[OK] \"woman\" -> \"woman\"\n",
"[ERR:4] \"restaurants henrys\" -> \"restaurants hair\"\n",
"[OK] \"run\" -> \"run\"\n",
"[OK] \"fall knock\" -> \"fall knock\"\n",
"[OK] \"fifteen misalinement\" -> \"fifteen misalinement\"\n",
"[OK] \"rides\" -> \"rides\"\n",
"[OK] \"shield cavities\" -> \"shield cavities\"\n",
"[OK] \"requests twist\" -> \"requests twist\"\n",
"[OK] \"blades races\" -> \"blades races\"\n",
"[OK] \"appraisals\" -> \"appraisals\"\n",
"[ERR:3] \"manpower durability\" -> \"manpower ability\"\n",
"[OK] \"turbines prices\" -> \"turbines prices\"\n",
"[OK] \"glue\" -> \"glue\"\n",
"[OK] \"share\" -> \"share\"\n",
"[OK] \"progress nurses\" -> \"progress nurses\"\n",
"[OK] \"freights\" -> \"freights\"\n",
"[OK] \"thumb\" -> \"thumb\"\n",
"[OK] \"protection button\" -> \"protection button\"\n",
"[OK] \"cost\" -> \"cost\"\n",
"[OK] \"things\" -> \"things\"\n",
"[OK] \"master\" -> \"master\"\n",
"[OK] \"conspiracies\" -> \"conspiracies\"\n",
"[OK] \"analyzers\" -> \"analyzers\"\n",
"[OK] \"sidewalks qualifiers\" -> \"sidewalks qualifiers\"\n",
"[ERR:1] \"link commendation\" -> \"link commendations\"\n",
"[OK] \"mule legend\" -> \"mule legend\"\n",
"[OK] \"specialty airspeed\" -> \"specialty airspeed\"\n",
"[OK] \"departures ability\" -> \"departures ability\"\n",
"[OK] \"mustard\" -> \"mustard\"\n",
"[OK] \"web\" -> \"web\"\n",
"[OK] \"solids\" -> \"solids\"\n",
"[OK] \"rank dabs\" -> \"rank dabs\"\n",
"[OK] \"escape channel\" -> \"escape channel\"\n",
"[OK] \"chase\" -> \"chase\"\n",
"[OK] \"rushes\" -> \"rushes\"\n",
"[OK] \"sirs\" -> \"sirs\"\n",
"[OK] \"fixture leak\" -> \"fixture leak\"\n",
"[OK] \"bomb qualifiers\" -> \"bomb qualifiers\"\n",
"[OK] \"segments\" -> \"segments\"\n",
"[OK] \"mercury\" -> \"mercury\"\n",
"[OK] \"bears milks\" -> \"bears milks\"\n",
"[OK] \"specification\" -> \"specification\"\n",
"[OK] \"birth wool\" -> \"birth wool\"\n",
"[ERR:5] \"harnesses admiral\" -> \"harnesses aim\"\n",
"[ERR:1] \"harpoons downgrades\" -> \"harpoons downgrade\"\n",
"[OK] \"waterline deposition\" -> \"waterline deposition\"\n",
"[OK] \"mate\" -> \"mate\"\n",
"[ERR:5] \"flesh memorandum\" -> \"flesh memory\"\n",
"[ERR:4] \"parity tricks\" -> \"nail tricks\"\n",
"[OK] \"facts\" -> \"facts\"\n",
"[OK] \"scores\" -> \"scores\"\n",
"[OK] \"truths\" -> \"truths\"\n",
"[OK] \"discard puddle\" -> \"discard puddle\"\n",
"[ERR:2] \"quarter catches\" -> \"quarter catch\"\n",
"[OK] \"extras\" -> \"extras\"\n",
"[OK] \"pick coxswain\" -> \"pick coxswain\"\n",
"[OK] \"rejection\" -> \"rejection\"\n",
"[OK] \"steeple\" -> \"steeple\"\n",
"[OK] \"catch\" -> \"catch\"\n",
"[OK] \"reservoirs\" -> \"reservoirs\"\n",
"[OK] \"blueprints organs\" -> \"blueprints organs\"\n",
"[OK] \"memory\" -> \"memory\"\n",
"[OK] \"capacitances\" -> \"capacitances\"\n",
"[OK] \"fact\" -> \"fact\"\n",
"[OK] \"emergencies\" -> \"emergencies\"\n",
"[OK] \"letterheads\" -> \"letterheads\"\n",
"[OK] \"stage\" -> \"stage\"\n",
"[OK] \"menus\" -> \"menus\"\n",
"[OK] \"painters\" -> \"painters\"\n",
"[OK] \"specialty spans\" -> \"specialty spans\"\n",
"[OK] \"arrival\" -> \"arrival\"\n",
"[OK] \"debts adjectives\" -> \"debts adjectives\"\n",
"[OK] \"divider shirt\" -> \"divider shirt\"\n",
"[OK] \"readiness\" -> \"readiness\"\n",
"[OK] \"couples frequencies\" -> \"couples frequencies\"\n",
"[OK] \"floor\" -> \"floor\"\n",
"[OK] \"screams\" -> \"screams\"\n",
"[ERR:1] \"fleet admission\" -> \"feet admission\"\n",
"[OK] \"liver pines\" -> \"liver pines\"\n",
"[OK] \"seams\" -> \"seams\"\n",
"[OK] \"cracks quality\" -> \"cracks quality\"\n",
"[OK] \"oscillation\" -> \"oscillation\"\n",
"[OK] \"lump\" -> \"lump\"\n",
"[OK] \"arrow\" -> \"arrow\"\n",
"[OK] \"streets tender\" -> \"streets tender\"\n",
"[OK] \"disassembly schedulers\" -> \"disassembly schedulers\"\n",
"[OK] \"litre fight\" -> \"litre fight\"\n",
"[OK] \"years\" -> \"years\"\n",
"[OK] \"ambiguity\" -> \"ambiguity\"\n",
"[OK] \"theory bags\" -> \"theory bags\"\n",
"[OK] \"ticks\" -> \"ticks\"\n",
"[OK] \"selections\" -> \"selections\"\n",
"[OK] \"subtask\" -> \"subtask\"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[OK] \"nets rocket\" -> \"nets rocket\"\n",
"[OK] \"coordinate\" -> \"coordinate\"\n",
"[ERR:4] \"raise alternations\" -> \"raise alternate\"\n",
"[OK] \"value\" -> \"value\"\n",
"[OK] \"injectors firer\" -> \"injectors firer\"\n",
"[OK] \"inventory\" -> \"inventory\"\n",
"[OK] \"slashes\" -> \"slashes\"\n",
"[OK] \"nerves\" -> \"nerves\"\n",
"[OK] \"industries\" -> \"industries\"\n",
"[ERR:3] \"initiator diagnoses\" -> \"indicator diagnoses\"\n",
"[OK] \"splicers\" -> \"splicers\"\n",
"[ERR:5] \"veteran increase\" -> \"veteraincrek\"\n",
"[OK] \"price\" -> \"price\"\n",
"[OK] \"points\" -> \"points\"\n",
"[OK] \"resources\" -> \"resources\"\n",
"[ERR:5] \"reproductions cube\" -> \"reproductions\"\n",
"[ERR:1] \"dock boosts\" -> \"dock boost\"\n",
"[OK] \"apprehensions lenders\" -> \"apprehensions lenders\"\n",
"[OK] \"badges\" -> \"badges\"\n",
"[OK] \"custodian\" -> \"custodian\"\n",
"[ERR:4] \"commission torques\" -> \"commission focuses\"\n",
"[OK] \"silences\" -> \"silences\"\n",
"[OK] \"pilots tabulations\" -> \"pilots tabulations\"\n",
"[OK] \"organ\" -> \"organ\"\n",
"[OK] \"affiants medium\" -> \"affiants medium\"\n",
"[OK] \"precaution\" -> \"precaution\"\n",
"[OK] \"hilltops designations\" -> \"hilltops designations\"\n",
"[OK] \"ratios\" -> \"ratios\"\n",
"[OK] \"arraignment\" -> \"arraignment\"\n",
"[OK] \"twins shoe\" -> \"twins shoe\"\n",
"[OK] \"ponds\" -> \"ponds\"\n",
"[OK] \"log taxis\" -> \"log taxis\"\n",
"[ERR:3] \"explanations battleship\" -> \"explanations battles\"\n",
"[OK] \"modem parts\" -> \"modem parts\"\n",
"[OK] \"piston limit\" -> \"piston limit\"\n",
"[OK] \"slope meets\" -> \"slope meets\"\n",
"[OK] \"diary agents\" -> \"diary agents\"\n",
"[OK] \"sole\" -> \"sole\"\n",
"[OK] \"lace\" -> \"lace\"\n",
"[OK] \"economy failure\" -> \"economy failure\"\n",
"[ERR:2] \"lapse opportunities\" -> \"cape opportunities\"\n",
"[OK] \"gyros keels\" -> \"gyros keels\"\n",
"[OK] \"bell silence\" -> \"bell silence\"\n",
"[OK] \"washtub realignments\" -> \"washtub realignments\"\n",
"[OK] \"yolks hilltops\" -> \"yolks hilltops\"\n",
"[OK] \"blower\" -> \"blower\"\n",
"[OK] \"codes\" -> \"codes\"\n",
"[OK] \"hazards\" -> \"hazards\"\n",
"[OK] \"bell tabulations\" -> \"bell tabulations\"\n",
"[OK] \"births fillers\" -> \"births fillers\"\n",
"[OK] \"bat\" -> \"bat\"\n",
"[OK] \"articles conducts\" -> \"articles conducts\"\n",
"[OK] \"millimeter\" -> \"millimeter\"\n",
"[OK] \"implements\" -> \"implements\"\n",
"[OK] \"note\" -> \"note\"\n",
"[OK] \"liter\" -> \"liter\"\n",
"[OK] \"compilers\" -> \"compilers\"\n",
"[OK] \"orifice metal\" -> \"orifice metal\"\n",
"[OK] \"average\" -> \"average\"\n",
"[OK] \"welder pressure\" -> \"welder pressure\"\n",
"[OK] \"sleep\" -> \"sleep\"\n",
"[OK] \"bang\" -> \"bang\"\n",
"[OK] \"churns\" -> \"churns\"\n",
"[OK] \"panels\" -> \"panels\"\n",
"[OK] \"wagons\" -> \"wagons\"\n",
"[OK] \"odors\" -> \"odors\"\n",
"[OK] \"possessions\" -> \"possessions\"\n",
"[OK] \"holddown chests\" -> \"holddown chests\"\n",
"[OK] \"wafer miss\" -> \"wafer miss\"\n",
"[OK] \"profit priority\" -> \"profit priority\"\n",
"[OK] \"want\" -> \"want\"\n",
"[OK] \"electron\" -> \"electron\"\n",
"[OK] \"trailer\" -> \"trailer\"\n",
"[OK] \"perforator\" -> \"perforator\"\n",
"[OK] \"arraignments controls\" -> \"arraignments controls\"\n",
"[OK] \"partition grasses\" -> \"partition grasses\"\n",
"[OK] \"abuser thanks\" -> \"abuser thanks\"\n",
"[OK] \"stake\" -> \"stake\"\n",
"[OK] \"claims\" -> \"claims\"\n",
"[OK] \"pint holddown\" -> \"pint holddown\"\n",
"[OK] \"models\" -> \"models\"\n",
"[OK] \"worlds\" -> \"worlds\"\n",
"[OK] \"silk\" -> \"silk\"\n",
"[ERR:1] \"alcohols crust\" -> \"alcohol crust\"\n",
"[OK] \"mess impulses\" -> \"mess impulses\"\n",
"[OK] \"option\" -> \"option\"\n",
"[OK] \"fetch prime\" -> \"fetch prime\"\n",
"[OK] \"energizer\" -> \"energizer\"\n",
"[OK] \"texts dockings\" -> \"texts dockings\"\n",
"[OK] \"drug\" -> \"drug\"\n",
"[OK] \"dress\" -> \"dress\"\n",
"[OK] \"profile\" -> \"profile\"\n",
"[OK] \"invention string\" -> \"invention string\"\n",
"[OK] \"damage serial\" -> \"damage serial\"\n",
"[OK] \"ponds\" -> \"ponds\"\n",
"[OK] \"threader freeze\" -> \"threader freeze\"\n",
"[OK] \"monitor\" -> \"monitor\"\n",
"[OK] \"scratches compasses\" -> \"scratches compasses\"\n",
"[OK] \"morning\" -> \"morning\"\n",
"[OK] \"peacetime dependencies\" -> \"peacetime dependencies\"\n",
"[OK] \"respects\" -> \"respects\"\n",
"[ERR:3] \"doors\" -> \"fogs\"\n",
"[OK] \"daughters cord\" -> \"daughters cord\"\n",
"[OK] \"troubles\" -> \"troubles\"\n",
"[OK] \"wastes\" -> \"wastes\"\n",
"[OK] \"wood\" -> \"wood\"\n",
"[ERR:4] \"writer license\" -> \"writer cents\"\n",
"[ERR:2] \"difficulties roar\" -> \"difficulties bar\"\n",
"[OK] \"assignment\" -> \"assignment\"\n",
"[ERR:10] \"keyboard linkages\" -> \"labor dinsnet\"\n",
"[ERR:2] \"principal\" -> \"principle\"\n",
"[OK] \"magnets\" -> \"magnets\"\n",
"[OK] \"amplifier\" -> \"amplifier\"\n",
"[OK] \"sterilizers\" -> \"sterilizers\"\n",
"[OK] \"terminals military\" -> \"terminals military\"\n",
"[OK] \"thimbles\" -> \"thimbles\"\n",
"[OK] \"container polishers\" -> \"container polishers\"\n",
"[OK] \"chain\" -> \"chain\"\n",
"[OK] \"policy\" -> \"policy\"\n",
"[OK] \"commas originals\" -> \"commas originals\"\n",
"[OK] \"key prevention\" -> \"key prevention\"\n",
"[OK] \"inventories\" -> \"inventories\"\n",
"[OK] \"researcher houses\" -> \"researcher houses\"\n",
"[OK] \"profile electron\" -> \"profile electron\"\n",
"[OK] \"cavity basis\" -> \"cavity basis\"\n",
"[OK] \"differences button\" -> \"differences button\"\n",
"[OK] \"haul\" -> \"haul\"\n",
"[OK] \"margins athwartship\" -> \"margins athwartship\"\n",
"[OK] \"decoder decrements\" -> \"decoder decrements\"\n",
"[OK] \"margins towel\" -> \"margins towel\"\n",
"[OK] \"nerve\" -> \"nerve\"\n",
"[OK] \"masks cap\" -> \"masks cap\"\n",
"[OK] \"arches\" -> \"arches\"\n",
"[OK] \"raps\" -> \"raps\"\n",
"[OK] \"carpet\" -> \"carpet\"\n",
"[ERR:2] \"rehabilitation pain\" -> \"rehabilitation pairs\"\n",
"[ERR:2] \"cores roar\" -> \"coders roar\"\n",
"[OK] \"retractors forty\" -> \"retractors forty\"\n",
"[OK] \"cheek\" -> \"cheek\"\n",
"[OK] \"spoke\" -> \"spoke\"\n",
"[OK] \"ampere\" -> \"ampere\"\n",
"[OK] \"gleams\" -> \"gleams\"\n",
"[OK] \"move dot\" -> \"move dot\"\n",
"[OK] \"efforts solvents\" -> \"efforts solvents\"\n",
"[OK] \"fives\" -> \"fives\"\n",
"[OK] \"bundle\" -> \"bundle\"\n",
"[OK] \"riding\" -> \"riding\"\n",
"[OK] \"mailbox intercom\" -> \"mailbox intercom\"\n",
"[OK] \"steels\" -> \"steels\"\n",
"[OK] \"hate\" -> \"hate\"\n",
"[OK] \"bread shave\" -> \"bread shave\"\n",
"[OK] \"film mechanic\" -> \"film mechanic\"\n",
"[OK] \"graph\" -> \"graph\"\n",
"[OK] \"nickel nose\" -> \"nickel nose\"\n",
"[OK] \"facepiece\" -> \"facepiece\"\n",
"[ERR:1] \"nerve\" -> \"nerves\"\n",
"[OK] \"phases whisper\" -> \"phases whisper\"\n",
"[OK] \"affiants\" -> \"affiants\"\n",
"[OK] \"jeopardy halyards\" -> \"jeopardy halyards\"\n",
"[OK] \"function heels\" -> \"function heels\"\n",
"[OK] \"pile\" -> \"pile\"\n",
"[ERR:2] \"modification crowds\" -> \"modification crews\"\n",
"[ERR:1] \"swimmer widths\" -> \"swimmer width\"\n",
"[OK] \"laundries route\" -> \"laundries route\"\n",
"[OK] \"gage carloads\" -> \"gage carloads\"\n",
"[OK] \"insanities\" -> \"insanities\"\n",
"[ERR:4] \"decoder odds\" -> \"decoders arts\"\n",
"[OK] \"alternations\" -> \"alternations\"\n",
"[OK] \"powders fists\" -> \"powders fists\"\n",
"[OK] \"course\" -> \"course\"\n",
"[OK] \"injuries\" -> \"injuries\"\n",
"[OK] \"oscillators sums\" -> \"oscillators sums\"\n",
"[ERR:5] \"photographs fetches\" -> \"photographs factors\"\n",
"[OK] \"brother\" -> \"brother\"\n",
"[OK] \"amounts stripes\" -> \"amounts stripes\"\n",
"[OK] \"hickories turns\" -> \"hickories turns\"\n",
"[OK] \"register\" -> \"register\"\n",
"[OK] \"worm sockets\" -> \"worm sockets\"\n",
"[OK] \"blanks\" -> \"blanks\"\n",
"[OK] \"defect\" -> \"defect\"\n",
"[OK] \"counsel\" -> \"counsel\"\n",
"[OK] \"march\" -> \"march\"\n",
"[OK] \"teeth bags\" -> \"teeth bags\"\n",
"[ERR:3] \"hillside alarms\" -> \"hills alarms\"\n",
"[ERR:4] \"discussions airspeed\" -> \"discussions arspeaces\"\n",
"[OK] \"rains\" -> \"rains\"\n",
"[OK] \"maps syntax\" -> \"maps syntax\"\n",
"[ERR:3] \"disadvantages bailing\" -> \"disadvantages basin\"\n",
"[OK] \"harness\" -> \"harness\"\n",
"[OK] \"stoppers manners\" -> \"stoppers manners\"\n",
"[ERR:1] \"circuitries cheek\" -> \"circuitries check\"\n",
"[OK] \"completion heater\" -> \"completion heater\"\n",
"[ERR:1] \"milk structures\" -> \"milk structure\"\n",
"[OK] \"heads sides\" -> \"heads sides\"\n",
"[ERR:4] \"obligations\" -> \"combinations\"\n",
"[OK] \"percents wardrooms\" -> \"percents wardrooms\"\n",
"[OK] \"truths\" -> \"truths\"\n",
"[OK] \"ones\" -> \"ones\"\n",
"[OK] \"trades leapers\" -> \"trades leapers\"\n",
"[OK] \"hats drainers\" -> \"hats drainers\"\n",
"[OK] \"capstans exhausts\" -> \"capstans exhausts\"\n",
"[OK] \"love sewer\" -> \"love sewer\"\n",
"[OK] \"accord precedence\" -> \"accord precedence\"\n",
"[OK] \"fractures paygrades\" -> \"fractures paygrades\"\n",
"[OK] \"thumbs\" -> \"thumbs\"\n",
"[ERR:1] \"tie header\" -> \"tietheader\"\n",
"[OK] \"highway mill\" -> \"highway mill\"\n",
"[OK] \"answers self\" -> \"answers self\"\n",
"[OK] \"habits jugs\" -> \"habits jugs\"\n",
"[ERR:2] \"saturday citizens\" -> \"saturday cities\"\n",
"[OK] \"moons\" -> \"moons\"\n",
"[OK] \"machines\" -> \"machines\"\n",
"[OK] \"individuals galley\" -> \"individuals galley\"\n",
"[OK] \"sabotage\" -> \"sabotage\"\n",
"[OK] \"merchandise abbreviations\" -> \"merchandise abbreviations\"\n",
"[OK] \"strike hatchets\" -> \"strike hatchets\"\n",
"[ERR:6] \"facilities nylons\" -> \"facilities ride\"\n",
"[OK] \"patch\" -> \"patch\"\n",
"[OK] \"drainers train\" -> \"drainers train\"\n",
"[OK] \"abbreviations payment\" -> \"abbreviations payment\"\n",
"[OK] \"expenditure parties\" -> \"expenditure parties\"\n",
"[OK] \"leather\" -> \"leather\"\n",
"[ERR:2] \"tuition faults\" -> \"tuition facts\"\n",
"[OK] \"flame\" -> \"flame\"\n",
"[ERR:1] \"fee harbors\" -> \"fee harbor\"\n",
"[OK] \"fund\" -> \"fund\"\n",
"[OK] \"tugs totals\" -> \"tugs totals\"\n",
"[ERR:1] \"procurements fridays\" -> \"procurements friday\"\n",
"[OK] \"messengers helicopters\" -> \"messengers helicopters\"\n",
"[OK] \"dollars crew\" -> \"dollars crew\"\n",
"[ERR:5] \"memorandums breakdowns\" -> \"memorandums beacon\"\n",
"[OK] \"helm\" -> \"helm\"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[OK] \"workbooks\" -> \"workbooks\"\n",
"[OK] \"bilge\" -> \"bilge\"\n",
"[ERR:4] \"loan element\" -> \"loan enemy\"\n",
"[OK] \"pattern\" -> \"pattern\"\n",
"[OK] \"lick\" -> \"lick\"\n",
"[OK] \"flush hatchet\" -> \"flush hatchet\"\n",
"[OK] \"members\" -> \"members\"\n",
"[OK] \"standard dirt\" -> \"standard dirt\"\n",
"[OK] \"terrains seasons\" -> \"terrains seasons\"\n",
"[OK] \"communities\" -> \"communities\"\n",
"[OK] \"calendars nonavailability\" -> \"calendars nonavailability\"\n",
"[OK] \"stoppers bear\" -> \"stoppers bear\"\n",
"[OK] \"limbs\" -> \"limbs\"\n",
"[OK] \"adjustments tub\" -> \"adjustments tub\"\n",
"[ERR:4] \"spear\" -> \"age\"\n",
"[ERR:4] \"nozzles\" -> \"nods\"\n",
"[OK] \"requisitions\" -> \"requisitions\"\n",
"[OK] \"leap senses\" -> \"leap senses\"\n",
"[OK] \"dictionaries\" -> \"dictionaries\"\n",
"[OK] \"nausea audits\" -> \"nausea audits\"\n",
"[OK] \"room draft\" -> \"room draft\"\n",
"[ERR:2] \"loop\" -> \"lap\"\n",
"[ERR:1] \"tablespoon fogs\" -> \"tablespoon fog\"\n",
"[OK] \"scratches\" -> \"scratches\"\n",
"[OK] \"battleship\" -> \"battleship\"\n",
"[OK] \"diary\" -> \"diary\"\n",
"[OK] \"substance\" -> \"substance\"\n",
"[OK] \"presumptions buttons\" -> \"presumptions buttons\"\n",
"[OK] \"swaps\" -> \"swaps\"\n",
"[OK] \"interaction\" -> \"interaction\"\n",
"[OK] \"nomenclature\" -> \"nomenclature\"\n",
"[OK] \"farads\" -> \"farads\"\n",
"[OK] \"disgust\" -> \"disgust\"\n",
"[OK] \"program\" -> \"program\"\n",
"[ERR:2] \"much ratio\" -> \"much rations\"\n",
"[OK] \"colds lumber\" -> \"colds lumber\"\n",
"[OK] \"mustard thousand\" -> \"mustard thousand\"\n",
"[OK] \"calendars\" -> \"calendars\"\n",
"[OK] \"sundays socks\" -> \"sundays socks\"\n",
"[OK] \"procurements\" -> \"procurements\"\n",
"[OK] \"dears\" -> \"dears\"\n",
"[OK] \"accruals screen\" -> \"accruals screen\"\n",
"[OK] \"health\" -> \"health\"\n",
"[OK] \"acids chest\" -> \"acids chest\"\n",
"[OK] \"cargo\" -> \"cargo\"\n",
"[OK] \"sheets\" -> \"sheets\"\n",
"[ERR:1] \"wingnuts\" -> \"wingnut\"\n",
"[OK] \"payroll\" -> \"payroll\"\n",
"[OK] \"standing\" -> \"standing\"\n",
"[OK] \"expert\" -> \"expert\"\n",
"[OK] \"comma gallows\" -> \"comma gallows\"\n",
"[OK] \"throttles chill\" -> \"throttles chill\"\n",
"[OK] \"modification\" -> \"modification\"\n",
"[OK] \"cable friend\" -> \"cable friend\"\n",
"[OK] \"exterior\" -> \"exterior\"\n",
"[OK] \"liquor\" -> \"liquor\"\n",
"[OK] \"roadside\" -> \"roadside\"\n",
"[OK] \"accord fetch\" -> \"accord fetch\"\n",
"[OK] \"wingnuts ignitions\" -> \"wingnuts ignitions\"\n",
"[OK] \"regulation\" -> \"regulation\"\n",
"[OK] \"jury\" -> \"jury\"\n",
"[OK] \"push\" -> \"push\"\n",
"[OK] \"seasoning shafts\" -> \"seasoning shafts\"\n",
"[ERR:1] \"tubs belts\" -> \"tubs bells\"\n",
"[OK] \"receipt\" -> \"receipt\"\n",
"[OK] \"objectives bodies\" -> \"objectives bodies\"\n",
"[ERR:3] \"learning manufacturers\" -> \"learning mnufacures\"\n",
"[OK] \"defections\" -> \"defections\"\n",
"[OK] \"airspeed fleet\" -> \"airspeed fleet\"\n",
"[OK] \"exchangers incentive\" -> \"exchangers incentive\"\n",
"[OK] \"case apprehensions\" -> \"case apprehensions\"\n",
"[OK] \"tens\" -> \"tens\"\n",
"[OK] \"varieties drops\" -> \"varieties drops\"\n",
"[OK] \"detection speech\" -> \"detection speech\"\n",
"[OK] \"fighting\" -> \"fighting\"\n",
"[OK] \"throttles\" -> \"throttles\"\n",
"[OK] \"overvoltages\" -> \"overvoltages\"\n",
"[OK] \"fans\" -> \"fans\"\n",
"[OK] \"badge\" -> \"badge\"\n",
"[OK] \"typist shocks\" -> \"typist shocks\"\n",
"[OK] \"satellites clips\" -> \"satellites clips\"\n",
"[OK] \"dependents\" -> \"dependents\"\n",
"[OK] \"states\" -> \"states\"\n",
"[OK] \"brace\" -> \"brace\"\n",
"[OK] \"twirls\" -> \"twirls\"\n",
"[OK] \"growths diagnoses\" -> \"growths diagnoses\"\n",
"[ERR:4] \"radar drops\" -> \"radar deck\"\n",
"[OK] \"inches crusts\" -> \"inches crusts\"\n",
"[OK] \"guideline bows\" -> \"guideline bows\"\n",
"[ERR:1] \"deflectors\" -> \"deflector\"\n",
"[OK] \"hashmark\" -> \"hashmark\"\n",
"[OK] \"intents\" -> \"intents\"\n",
"[OK] \"trips click\" -> \"trips click\"\n",
"[OK] \"mechanism\" -> \"mechanism\"\n",
"[OK] \"focus\" -> \"focus\"\n",
"[OK] \"science\" -> \"science\"\n",
"[OK] \"cot arrests\" -> \"cot arrests\"\n",
"[OK] \"blueprints\" -> \"blueprints\"\n",
"[OK] \"alert guard\" -> \"alert guard\"\n",
"[OK] \"shows utilities\" -> \"shows utilities\"\n",
"[OK] \"storm\" -> \"storm\"\n",
"[OK] \"helmsman baseline\" -> \"helmsman baseline\"\n",
"[OK] \"brace\" -> \"brace\"\n",
"[OK] \"choice\" -> \"choice\"\n",
"[OK] \"officials needle\" -> \"officials needle\"\n",
"[OK] \"application guest\" -> \"application guest\"\n",
"[OK] \"squadron bristles\" -> \"squadron bristles\"\n",
"[OK] \"compressors\" -> \"compressors\"\n",
"[OK] \"purpose\" -> \"purpose\"\n",
"[ERR:4] \"behavior finish\" -> \"behavior bin\"\n",
"[ERR:3] \"hems tickets\" -> \"hems tick\"\n",
"[OK] \"casualty turnarounds\" -> \"casualty turnarounds\"\n",
"[OK] \"thresholds\" -> \"thresholds\"\n",
"[OK] \"validations lighter\" -> \"validations lighter\"\n",
"Character error rate: 3.43084630524244%. Word accuracy: 87.52499999999999%.\n"
]
},
{
"data": {
"text/plain": [
"0.0343084630524244"
]
},
"execution_count": 72,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Reset graph\n",
"tf.compat.v1.reset_default_graph()\n",
"\n",
"# Specify parameters\n",
"decoderType = DecoderType.BeamSearch\n",
"loader = DataLoader(batch_size, imgSize, maxTextLen, nEpoch=nEpoch)\n",
"\n",
"# save characters of model for inference mode\n",
"open(FilePaths.fnCharList, 'w').write(str().join(loader.charList))\n",
"\n",
"# save words contained in dataset into file\n",
"open(FilePaths.fnCorpus, 'w').write(str(' ').join(loader.trainWords + loader.validationWords))\n",
"\n",
"# execute test\n",
"model = Model(loader.charList, decoderType, mustRestore=True, corpus=word_corpus)\n",
"testtest(model, loader)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Prediction"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/anaconda3/envs/blitz/lib/python3.7/site-packages/tensorflow/python/keras/legacy_tf_layers/normalization.py:308: UserWarning: `tf.layers.batch_normalization` is deprecated and will be removed in a future version. Please use `tf.keras.layers.BatchNormalization` instead. In particular, `tf.control_dependencies(tf.GraphKeys.UPDATE_OPS)` should not be used (consult the `tf.keras.layers.BatchNormalization` documentation).\n",
" '`tf.layers.batch_normalization` is deprecated and '\n",
"/anaconda3/envs/blitz/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer_v1.py:1719: UserWarning: `layer.apply` is deprecated and will be removed in a future version. Please use `layer.__call__` method instead.\n",
" warnings.warn('`layer.apply` is deprecated and '\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:`tf.nn.rnn_cell.MultiRNNCell` is deprecated. This class is equivalent as `tf.keras.layers.StackedRNNCells`, and will be replaced by that in Tensorflow 2.0.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/anaconda3/envs/blitz/lib/python3.7/site-packages/tensorflow/python/keras/layers/legacy_rnn/rnn_cell_impl.py:903: UserWarning: `tf.nn.rnn_cell.LSTMCell` is deprecated and will be removed in a future version. This class is equivalent as `tf.keras.layers.LSTMCell`, and will be replaced by that in Tensorflow 2.0.\n",
" warnings.warn(\"`tf.nn.rnn_cell.LSTMCell` is deprecated and will be \"\n",
"/anaconda3/envs/blitz/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer_v1.py:1727: UserWarning: `layer.add_variable` is deprecated and will be removed in a future version. Please use `layer.add_weight` method instead.\n",
" warnings.warn('`layer.add_variable` is deprecated and '\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Tensorflow: 2.4.0\n",
"Init with stored values from model/snapshot-1\n",
"INFO:tensorflow:Restoring parameters from model/snapshot-1\n",
"Prediction NN\n",
"Batch: 1 / 20\n",
"Batch: 2 / 20\n",
"Batch: 3 / 20\n",
"Batch: 4 / 20\n",
"Batch: 5 / 20\n",
"Batch: 6 / 20\n",
"Batch: 7 / 20\n",
"Batch: 8 / 20\n",
"Batch: 9 / 20\n",
"Batch: 10 / 20\n",
"Batch: 11 / 20\n",
"Batch: 12 / 20\n",
"Batch: 13 / 20\n",
"Batch: 14 / 20\n",
"Batch: 15 / 20\n",
"Batch: 16 / 20\n",
"Batch: 17 / 20\n",
"Batch: 18 / 20\n",
"Batch: 19 / 20\n",
"Batch: 20 / 20\n"
]
}
],
"source": [
"# Reset graph\n",
"tf.compat.v1.reset_default_graph()\n",
"\n",
"# Specify parameters\n",
"decoderType = DecoderType.BeamSearch\n",
"\n",
"loader = DataLoader(batch_size, imgSize, maxTextLen, nEpoch=nEpoch)\n",
"\n",
"# save characters of model for inference mode\n",
"open(FilePaths.fnCharList, 'w').write(str().join(loader.charList))\n",
"\n",
"# save words contained in dataset into file\n",
"open(FilePaths.fnCorpus, 'w').write(str(' ').join(loader.trainWords + loader.validationWords))\n",
"\n",
"# execute test\n",
"model = Model(loader.charList, decoderType, mustRestore=True, corpus=word_corpus)\n",
"response = predpred(model, loader)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Store response in CSV file"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {},
"outputs": [],
"source": [
"df_res = pd.read_csv('data/sample_submission.csv', index_col=0)\n",
"df_res.label[:] = response\n",
"df_res.to_csv('answer_123.csv')"
]
}
],
"metadata": {
"accelerator": "GPU",
"colab": {
"collapsed_sections": [],
"name": "blitz2_txtocr.ipynb",
"provenance": [],
"toc_visible": true
},
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.9"
},
"widgets": {
"application/vnd.jupyter.widget-state+json": {
"04a113b7504346eb9b7d540e429c3683": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"0667e8e68af9454186058ae25e679c3e": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": "initial"
}
},
"06dae492c5594dd890cf2508df4cb7f4": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HBoxModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HBoxView",
"box_style": "",
"children": [
"IPY_MODEL_0fd2ee5b6588440ab6c019ff538fddd3",
"IPY_MODEL_2844bc4ec2b04361a1a7d3135d094437"
],
"layout": "IPY_MODEL_ed85011d48264a01bc51c1c017e33913"
}
},
"0e1e166b08844a5893af7f9db4768f6b": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "success",
"description": "100%",
"description_tooltip": null,
"layout": "IPY_MODEL_4797a3569b9d4f01866ab9d3249601c6",
"max": 10000,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_30e53a6114b84ac6bfeadbcbce49bc41",
"value": 10000
}
},
"0fd2ee5b6588440ab6c019ff538fddd3": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "success",
"description": "100%",
"description_tooltip": null,
"layout": "IPY_MODEL_e2653757ca144f698cf9c0a703996853",
"max": 4000,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_5a02349e9f4f45e7b620ac939f8d9450",
"value": 4000
}
},
"106a1fbf43664ae78beaaa5944ea678a": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"201bb34936e8441cb3f4844b3c0c5ba3": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"225694dfe9d942fd8a38ec4d0a7bcd03": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"22d8710662ba4e6ab0eaf377ab05c814": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"233c0370ac474b4da4da1f56a64ee283": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HBoxModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HBoxView",
"box_style": "",
"children": [
"IPY_MODEL_3416cfc3246148ae84dca149b366887a",
"IPY_MODEL_fc260585f8e3467eafa489f98de91c9a"
],
"layout": "IPY_MODEL_dc51797e5632486bbc23ac3a82e61a61"
}
},
"2844bc4ec2b04361a1a7d3135d094437": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_36411bec38304ec9b609f30dde3eec80",
"placeholder": "​",
"style": "IPY_MODEL_3f67f1ce2f2943e3b6628eb6b8980568",
"value": " 4000/4000 [00:01&lt;00:00, 3403.89it/s]"
}
},
"2b6123d93dfd4fc7b4562a89a262eb45": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "success",
"description": "100%",
"description_tooltip": null,
"layout": "IPY_MODEL_ac32bbe688734272b398a5982e4dc0d3",
"max": 40000,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_7ce81b535fde41c3baa22e03f3c0fbe8",
"value": 40000
}
},
"30e53a6114b84ac6bfeadbcbce49bc41": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": "initial"
}
},
"3416cfc3246148ae84dca149b366887a": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "success",
"description": "100%",
"description_tooltip": null,
"layout": "IPY_MODEL_9e8587b85d604d7b9c0c1b88a04e5dc1",
"max": 4000,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_0667e8e68af9454186058ae25e679c3e",
"value": 4000
}
},
"36411bec38304ec9b609f30dde3eec80": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"3a2bad78acc44585b9829bf306c52b7a": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HBoxModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HBoxView",
"box_style": "",
"children": [
"IPY_MODEL_2b6123d93dfd4fc7b4562a89a262eb45",
"IPY_MODEL_a254be8e0e1544d5aaf1f623db739fe8"
],
"layout": "IPY_MODEL_82552d61c8c6469bbb0b4486ab2adc49"
}
},
"3b568e2223584e2ba5a6f91d6faa8a57": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "success",
"description": "100%",
"description_tooltip": null,
"layout": "IPY_MODEL_83e071849c444e0f9b055deca296d096",
"max": 40000,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_bcada1367d1b46369001ef81870e982b",
"value": 40000
}
},
"3e2af4d6e7074c439f1b8b2200dfd86d": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_9920cf96a63f4646bcc05ea73787d013",
"placeholder": "​",
"style": "IPY_MODEL_58280e0e440e488fa2bd532e05df947e",
"value": " 40000/40000 [00:16&lt;00:00, 2424.69it/s]"
}
},
"3f67f1ce2f2943e3b6628eb6b8980568": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"43812769dbc4455d999d700e1ade1749": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_f681351ff9ab41c0ad019c4817fc52a8",
"placeholder": "​",
"style": "IPY_MODEL_fc74723623bf4e4dba2b342ae7a5d925",
"value": " 40000/? [00:00&lt;00:00, 314795.52it/s]"
}
},
"4797a3569b9d4f01866ab9d3249601c6": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"49c1279c14054221aa6cdc2b47ac20f8": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": "initial"
}
},
"4f2b1b1be0c9483c8b05e213c5ce0cd6": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": "initial"
}
},
"5795c5bc3eae4d1ea740f3f8badf29f1": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_89e69d39571f4e4abc0490bb0235fd7b",
"placeholder": "​",
"style": "IPY_MODEL_8d085b455ec14addb9fec9a56592a31c",
"value": " 10000/10000 [04:36&lt;00:00, 36.19it/s]"
}
},
"58280e0e440e488fa2bd532e05df947e": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"5a02349e9f4f45e7b620ac939f8d9450": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": "initial"
}
},
"71eda1b10c1a40e9b02067582d024792": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HBoxModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HBoxView",
"box_style": "",
"children": [
"IPY_MODEL_a329300736664d5584cfebe3d8aa98d0",
"IPY_MODEL_b40b54d7254c4ebdbdb1a20dd520e9f2"
],
"layout": "IPY_MODEL_a6c35da7df8d4d69b19c0b7f207173aa"
}
},
"71f620b14e8f40d984a21e72a1d44df7": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HBoxModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HBoxView",
"box_style": "",
"children": [
"IPY_MODEL_3b568e2223584e2ba5a6f91d6faa8a57",
"IPY_MODEL_3e2af4d6e7074c439f1b8b2200dfd86d"
],
"layout": "IPY_MODEL_ff1accc920b94bb0a6f45fa7932b1b52"
}
},
"7ce81b535fde41c3baa22e03f3c0fbe8": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": "initial"
}
},
"82552d61c8c6469bbb0b4486ab2adc49": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"83e071849c444e0f9b055deca296d096": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"841590ffaf1b4e26af3466c1bd8ab821": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"89b65fa15d77493d950039b27d189416": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HBoxModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HBoxView",
"box_style": "",
"children": [
"IPY_MODEL_0e1e166b08844a5893af7f9db4768f6b",
"IPY_MODEL_d9372dff43214747a4cc1119c98f74e3"
],
"layout": "IPY_MODEL_841590ffaf1b4e26af3466c1bd8ab821"
}
},
"89e69d39571f4e4abc0490bb0235fd7b": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"8d085b455ec14addb9fec9a56592a31c": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"96528b6034584166ba25869c6071905b": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"9920cf96a63f4646bcc05ea73787d013": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"9e8587b85d604d7b9c0c1b88a04e5dc1": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"9f7ce693dc03402c8ff6173353a4cc38": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"a254be8e0e1544d5aaf1f623db739fe8": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_a326496d7b7e48cf8af7d144000e6c09",
"placeholder": "​",
"style": "IPY_MODEL_225694dfe9d942fd8a38ec4d0a7bcd03",
"value": " 40000/40000 [18:28&lt;00:00, 36.08it/s]"
}
},
"a2fb54c188264a24a9aa46d61e1e5d04": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "success",
"description": "100%",
"description_tooltip": null,
"layout": "IPY_MODEL_f5bbeddd413d46009b660a5980e960df",
"max": 10000,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_cbcf2d16f0d94dbe95f98482990189b3",
"value": 10000
}
},
"a326496d7b7e48cf8af7d144000e6c09": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"a329300736664d5584cfebe3d8aa98d0": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "success",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_abfb3e162f404ef785c67a880628fbd3",
"max": 1,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_4f2b1b1be0c9483c8b05e213c5ce0cd6",
"value": 1
}
},
"a659eb6e06bb436d9c35043bf3f174cd": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"a6c35da7df8d4d69b19c0b7f207173aa": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"abfb3e162f404ef785c67a880628fbd3": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"ac32bbe688734272b398a5982e4dc0d3": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"b2867da55a7e499689e1b76bbe47dd3e": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HBoxModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HBoxView",
"box_style": "",
"children": [
"IPY_MODEL_de44aca319874ebf8519ff4b1ee53e20",
"IPY_MODEL_43812769dbc4455d999d700e1ade1749"
],
"layout": "IPY_MODEL_96528b6034584166ba25869c6071905b"
}
},
"b40b54d7254c4ebdbdb1a20dd520e9f2": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_ccdaad2aa45c43158460b3767ea04940",
"placeholder": "​",
"style": "IPY_MODEL_a659eb6e06bb436d9c35043bf3f174cd",
"value": " 40000/? [00:00&lt;00:00, 604214.21it/s]"
}
},
"b5ef88d5bea94884903f5d2381eb521d": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"bcada1367d1b46369001ef81870e982b": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": "initial"
}
},
"c15a6cb9e5424daaa96bbb6acb2eae65": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HBoxModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HBoxView",
"box_style": "",
"children": [
"IPY_MODEL_a2fb54c188264a24a9aa46d61e1e5d04",
"IPY_MODEL_5795c5bc3eae4d1ea740f3f8badf29f1"
],
"layout": "IPY_MODEL_04a113b7504346eb9b7d540e429c3683"
}
},
"cbcf2d16f0d94dbe95f98482990189b3": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": "initial"
}
},
"ccdaad2aa45c43158460b3767ea04940": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"d9372dff43214747a4cc1119c98f74e3": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_201bb34936e8441cb3f4844b3c0c5ba3",
"placeholder": "​",
"style": "IPY_MODEL_106a1fbf43664ae78beaaa5944ea678a",
"value": " 10000/10000 [00:03&lt;00:00, 3097.02it/s]"
}
},
"dc51797e5632486bbc23ac3a82e61a61": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"de44aca319874ebf8519ff4b1ee53e20": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "success",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_9f7ce693dc03402c8ff6173353a4cc38",
"max": 1,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_49c1279c14054221aa6cdc2b47ac20f8",
"value": 1
}
},
"e2653757ca144f698cf9c0a703996853": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"ed85011d48264a01bc51c1c017e33913": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"f5bbeddd413d46009b660a5980e960df": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"f681351ff9ab41c0ad019c4817fc52a8": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"fc260585f8e3467eafa489f98de91c9a": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_22d8710662ba4e6ab0eaf377ab05c814",
"placeholder": "​",
"style": "IPY_MODEL_b5ef88d5bea94884903f5d2381eb521d",
"value": " 4000/4000 [01:51&lt;00:00, 36.02it/s]"
}
},
"fc74723623bf4e4dba2b342ae7a5d925": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"ff1accc920b94bb0a6f45fa7932b1b52": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
}
}
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment