Loading

AI Blitz 5 ⚡

First place solution for "Text OCR"

Solution for TXTOCR challenge

miykael

This notebook describes my approach of how to solve the TXTOCR challenge. It combines some favourable data preparation with an already well developed OCR algorithm that I adapted and trained on this specific dataset.

(colab only) Setup AIcrowd to get data

In [ ]:
!pip install git+https://gitlab.aicrowd.com/yoogottamk/aicrowd-cli.git
API_KEY = """SECRET_KEY"""
!aicrowd login --api-key $API_KEY
In [ ]:
!aicrowd dataset download -c txtocr >/dev/null
In [ ]:
!rm -rf data
!mkdir data

!mv train.csv data/train.csv
!mv val.csv data/val.csv

!unzip train.zip -d data/
!unzip val.zip -d data/
!unzip test.zip -d data/

!rm -rf *zip sample_data

Step 1 - Getting data into shape

Import modules

In [1]:
import numpy as np
import pandas as pd
from glob import glob
from os.path import join, basename
import seaborn as sns
import matplotlib.pyplot as plt
from tqdm.notebook import tqdm
from skimage.color import rgb2gray
from sklearn.cluster import KMeans

Loading Data

Labels

In [2]:
# Load datasets
df_train = pd.read_csv('data/train.csv', index_col=0).sort_index()
df_val = pd.read_csv('data/val.csv', index_col=0).sort_index()
df_test = pd.read_csv('data/sample_submission.csv', index_col=0).sort_index()
df_train
Out[2]:
label
image_id
0 inventory
1 directories letter
2 growth splints
3 kicks
4 seventies
... ...
39995 output dioxide
39996 cruises fellow
39997 turn
39998 drift search
39999 handler

40000 rows × 1 columns

Images

In [3]:
# Get filenames
names_train = sorted(glob(join('data', 'train', '*')))
names_val = sorted(glob(join('data', 'val', '*')))
names_test = sorted(glob(join('data', 'test', '*')))

# Combine filenames with label
label_train = [int(basename(n)[:-4]) for n in names_train]
label_train = pd.DataFrame(np.transpose([label_train, names_train]), columns=['idx', 'name'])
label_train.idx = label_train.idx.astype('int')
label_train = label_train.set_index('idx').sort_index()
label_train['label'] = df_train.label

label_val = [int(basename(n)[:-4]) for n in names_val]
label_val = pd.DataFrame(np.transpose([label_val, names_val]), columns=['idx', 'name'])
label_val.idx = label_val.idx.astype('int')
label_val= label_val.set_index('idx').sort_index()
label_val['label'] = df_val.label

label_test = [int(basename(n)[:-4]) for n in names_test]
label_test = pd.DataFrame(np.transpose([label_test, names_test]), columns=['idx', 'name'])
label_test.idx = label_test.idx.astype('int')
label_test = label_test.set_index('idx').sort_index();
In [4]:
# Check content
label_train.head()
Out[4]:
name label
idx
0 data/train/0.png inventory
1 data/train/1.png directories letter
2 data/train/2.png growth splints
3 data/train/3.png kicks
4 data/train/4.png seventies
In [5]:
label_train.sample().values
Out[5]:
array([['data/train/7448.png', 'navies chase']], dtype=object)
In [6]:
# Show random image
from PIL import Image
sample = np.ravel(label_train.sample().values)
im = Image.open(sample[0])
im
Out[6]:

Preprocess images

In [7]:
def prepare_text(df_label):
    
    """This functions takes the original image, finds where the text is,
    cuts it out, adds a certain padding and transforms colors to grayscale."""

    images = []
    for i in tqdm(df_label.name):

        # Load image as grayscale
        img = np.array(Image.open(i))

        try:
            # Compute scope of text (with padding)
            padding = 4
            x_scope = np.ravel(np.argwhere(np.any(img.std(1)>=1e-8, axis=1)))[[0, -1]] - [padding, -(1+padding)]
            x_scope = np.clip(x_scope, 0, 255)
            y_scope = np.ravel(np.argwhere(np.any(img.std(0)>=1e-8, axis=1)))[[0, -1]] - [padding, -(1+padding)]
            y_scope = np.clip(y_scope, 0, 255)

            # Crop image
            img = img[x_scope[0]:x_scope[1], y_scope[0]:y_scope[1]]

            # Compute color centers
            n_clusters = 2
            k_means = KMeans(n_clusters=n_clusters).fit(img.reshape((-1, 3)))
            centers = k_means.cluster_centers_
            labels = k_means.labels_

            # Make sure that dominant background color is center_0
            if labels.mean() > 0.5:
                centers = centers[::-1]

            # Compute distance between pixels and dominant color
            new_img = np.linalg.norm(img.reshape(-1, 3)-centers[0], axis=1).reshape(img.shape[:2])

            # Clip and rescale image to main colors
            plow = np.percentile(new_img, 5)
            phigh = np.percentile(new_img, 95)
            new_img = np.clip(new_img, plow, phigh)
            new_img = new_img - new_img.min()
            new_img = new_img / new_img.max()
            
            # Flip colors
            new_img = 1. - new_img

        except:
            # If it fails make image empty
            new_img = np.ones((21, 80))
            
        new_img = np.array(new_img*255, dtype='uint8')

        images.append(new_img)
    
    return images

Example of the preprocessing

In [16]:
# Plot an random image before and after preprocessing
fidx = np.random.choice(len(label_train))
img = Image.open(label_train.name[fidx])
img_preproc = prepare_text(label_train.iloc[fidx:fidx+1])

plt.title('before')
plt.imshow(img)
plt.show()
plt.title('after')
plt.imshow(img_preproc[0], cmap='gray')
plt.show();
In [17]:
# Plot an image before and after preprocessing
fidx = 63
img = Image.open(label_train.name[fidx])
img_preproc = prepare_text(label_train.iloc[fidx:fidx+1])

plt.title('before')
plt.imshow(img)
plt.show()
plt.title('after')
plt.imshow(img_preproc[0], cmap='gray')
plt.show();

The trick with this preprocessing is two fold:

  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.
  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.

Run Preprocessing for all images

In [ ]:
# Preprocess training set and save data on disk
img_train = prepare_text(label_train)
np.savez_compressed('img_train',
                    data=np.array(img_train,dtype=object),
                    labels=df_train.label.values)

# Preprocess validation set and save data on disk
img_val = prepare_text(label_val)
np.savez_compressed('img_val',
                    data=np.array(img_val,dtype=object),
                    labels=df_val.label.values)

# Preprocess validation set and save data on disk
img_test = prepare_text(label_test)
np.savez_compressed('img_test', data=np.array(img_test,dtype=object))

Load data (helps with rerunning analysis multiple times)

In [18]:
# Load train data
npy_train = np.load('img_train.npz', allow_pickle=True)
img_train = npy_train['data']
label_train = npy_train['labels']

# Load val data
npy_val = np.load('img_val.npz', allow_pickle=True)
img_val = npy_val['data']
label_val = npy_val['labels']

# Load test data
npy_test = np.load('img_test.npz', allow_pickle=True)
img_test = npy_test['data']

Step 2 - EDA: Look at data

Exploration of labels

In [19]:
# Explore words in labels
words = np.array(list(df_train.label.values) + list(df_val.label.values))
words.shape, words
Out[19]:
((44000,), array(['inventory', 'directories letter', 'growth splints', ...,
        'casualty turnarounds', 'thresholds', 'validations lighter'],
       dtype='<U31'))
In [20]:
# Explore characteres in labels
letters = []
for i, w in enumerate(words):
    for c in w:
        letters.append(c)
letters = np.array(letters)
letters.shape, letters
Out[20]:
((491599,), array(['i', 'n', 'v', ..., 't', 'e', 'r'], dtype='<U1'))
In [21]:
# Plot unique characters
pd.value_counts(letters).plot.bar(figsize=(14, 3));
In [22]:
# Print which letters
unique_letters = ''.join(np.unique(letters))
unique_letters
Out[22]:
' .abcdefghijklmnopqrstuvwxyz'
In [23]:
# Max length of text
text_length = [len(w) for w in words]
plt.hist(text_length, bins=100);
print('Max:', np.max(text_length))
Max: 31

Exploration of images

In [24]:
# Plot example image
img = img_train[1]
label = label_train[1]
plt.title(label)
plt.imshow(img);
In [25]:
# Size of words
word_size = []
for i, e in tqdm(enumerate(img_train)):
    word_size.append(e.shape[1])
plt.hist(word_size, bins=100);
In [26]:
# height of words
word_height = []
for i, e in tqdm(enumerate(img_train)):
    word_height.append(e.shape[0])
plt.hist(word_height, bins=100);

Create word corpus of training and validation set - used for later typo correction

In [66]:
# Get words from training and validation set
corpus = np.array(list(label_train) + list(label_val), dtype='str')
word_list_txt = []
for w in tqdm(corpus):
    word_list_txt = word_list_txt + w.split()
word_list_txt = list(np.unique(word_list_txt))
len(word_list_txt), word_list_txt[:10]
Out[66]:
(5450,
 ['abbreviation',
  'abbreviations',
  'abettor',
  'abettors',
  'abilities',
  'ability',
  'abrasion',
  'abrasions',
  'abrasive',
  'abrasives'])
In [67]:
# Overwrite word corpus by dataset only
word_corpus = np.unique(word_list_txt)
len(word_corpus)
Out[67]:
5450

Step 3 - Prepare dataset for ML model

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.

In [27]:
def create_canvas(img):

    # Target size
    height = 32
    length = 256

    # Load image and extract size
    h, w = img.shape

    # Prepare canvas
    canvas = np.array(np.ones((height, length))*255, dtype='uint8')

    # Find middle line of image
    weigth = np.mean(img, axis=1)
    try:
        middle_idx = int(np.median(np.argwhere(weigth<np.percentile(weigth, 30))))
    except:
        middle_idx = int(h/2)

    # Fill canvas with image
    offset_x = length//2 - w//2
    offset_y = height//2 - middle_idx
    canvas[offset_y:offset_y+h, offset_x:offset_x+w] = img
    
    # Convert to range [-1, 1]
    canvas = canvas / 127.5 - 1
    
    return canvas
In [28]:
# Prepare datasets
x_train = np.array([create_canvas(i) for i in tqdm(img_train)])
x_val = np.array([create_canvas(i) for i in tqdm(img_val)])
x_test = np.array([create_canvas(i) for i in tqdm(img_test)])
/anaconda3/envs/blitz/lib/python3.7/site-packages/numpy/core/fromnumeric.py:3373: RuntimeWarning: Mean of empty slice.
  out=out, **kwargs)
/anaconda3/envs/blitz/lib/python3.7/site-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in double_scalars
  ret = ret.dtype.type(ret / rcount)
In [31]:
# Plot a few examples
for i in range(10):
    plt.imshow(x_train[i], cmap='gray')
    plt.show()
In [34]:
# Plot mean image
plt.imshow(x_train.mean(0), cmap='gray');
In [35]:
# Plot median image
plt.imshow(np.median(x_train, axis=0), cmap='gray');
In [36]:
# Plot std image
plt.imshow(np.std(x_train, axis=0), cmap='gray');

Step 4 - Setup SimpleHTR

The code for this model is taken from 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.

To run SimpleHTR we need some additional libraries.

In [ ]:
!pip install -U editdistance opencv-python tensorflow==2.4.0
In [40]:
# Data needs to be transposed for SimpleHTR (del command is to save memory)
x_htr_tr = np.rollaxis(x_train, 2, 1)
del x_train
x_htr_va = np.rollaxis(x_val, 2, 1)
del x_val
x_htr_te = np.rollaxis(x_test, 2, 1)
del x_test

Save images to npy

To make the dataset work with SimpleHTR, I stored it in a similar format as the one it was trained on.

In [41]:
import os
for d in ['data_tr', 'data_val', 'data_te']:
    if not os.path.exists(d):
        os.makedirs(d)
In [42]:
%%time
for i, x in enumerate(x_htr_tr):
    np.savez_compressed('data_tr/%05d' % (i + 1), img=x)
    np.savetxt('data_tr/%05d.txt' % (i + 1), [label_train[i]], fmt='%s')
del x_htr_tr
CPU times: user 32.1 s, sys: 16.1 s, total: 48.2 s
Wall time: 53.2 s
In [43]:
%%time
for i, x in enumerate(x_htr_va):
    np.savez_compressed('data_val/%05d' % (i + 1), img=x)
    np.savetxt('data_val/%05d.txt' % (i + 1), [label_val[i]], fmt='%s')
del x_htr_va
CPU times: user 3.41 s, sys: 1.89 s, total: 5.3 s
Wall time: 5.58 s
In [44]:
%%time
for i, x in enumerate(x_htr_te):
    np.savez_compressed('data_te/%05d' % (i + 1), img=x)
del x_htr_te
CPU times: user 7.01 s, sys: 2.92 s, total: 9.94 s
Wall time: 11.6 s

Adaptation 1 - of code in DataLoader.py

In [45]:
import random
from os.path import join as opj
In [46]:
class Sample:
    "sample from the dataset"

    def __init__(self, gtText, filePath):
        self.gtText = gtText
        self.filePath = filePath
In [47]:
class Batch:
    "batch containing images and ground truth texts"

    def __init__(self, gtTexts, imgs):
        self.imgs = np.stack(imgs, axis=0)
        self.gtTexts = gtTexts

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.

In [48]:
class DataLoader:

    def __init__(self, batchSize, imgSize, maxTextLen, nEpoch=20000):
        "load images and texts at given location"

        self.currIdx = 0
        self.batchSize = batchSize
        self.imgSize = imgSize
        self.samples = []
        self.tests = []
        self.predictions = []
        
        # Load training files
        files_tr = sorted(glob(opj('data_tr', '*npz')))
        chars = set()
        for fileName in files_tr:

            with open(fileName.replace('.npz', '.txt')) as ftxt:
                gtText = ftxt.readline().strip()

            chars = chars.union(set(list(gtText)))

            # put sample into list
            self.samples.append(Sample(gtText, fileName))

        # Load validation files
        files_val = sorted(glob(opj('data_val', '*npz')))
        for fileName in files_val:

            with open(fileName.replace('.npz', '.txt')) as ftxt:
                gtText = ftxt.readline().strip()

            # put sample into list
            self.tests.append(Sample(gtText, fileName))

        # Load prediction files
        files_pred = sorted(glob(opj('data_te', '*npz')))
        for fileName in files_pred:
            # put sample into list
            self.predictions.append(Sample('test', fileName))
            
        # split into training and validation set: 80% - 20%
        splitIdx = int(0.8 * len(self.samples))
        self.trainSamples = self.samples[:splitIdx]
        self.validationSamples = self.samples[splitIdx:]
        self.testSamples = self.tests
        self.predSamples = self.predictions

        # put words into lists
        self.trainWords = [x.gtText for x in self.trainSamples]
        self.validationWords = [x.gtText for x in self.validationSamples]

        # number of randomly chosen samples per epoch for training
        self.numTrainSamplesPerEpoch = nEpoch

        # start with train set
        self.trainSet()

        # list of all chars in dataset
        self.charList = sorted(list(chars))

    def truncateLabel(self, text, maxTextLen):
        # ctc_loss can't compute loss if it cannot find a mapping between text label and input
        # labels. Repeat letters cost double because of the blank symbol needing to be inserted.
        # If a too-long label is provided, ctc_loss returns an infinite gradient
        cost = 0
        for i in range(len(text)):
            if i != 0 and text[i] == text[i - 1]:
                cost += 2
            else:
                cost += 1
            if cost > maxTextLen:
                return text[:i]
        return text

    def trainSet(self):
        "switch to randomly chosen subset of training set"
        self.currIdx = 0
        random.shuffle(self.trainSamples)
        self.samples = self.trainSamples[:self.numTrainSamplesPerEpoch]
        self.currSet = 'train'

    def validationSet(self):
        "switch to validation set"
        self.currIdx = 0
        self.samples = self.validationSamples
        self.currSet = 'val'

    def testSet(self):
        "switch to test set"
        self.currIdx = 0
        self.samples = self.testSamples
        self.currSet = 'tes'

    def predictionSet(self):
        "switch to pred set"
        self.currIdx = 0
        self.samples = self.predSamples
        self.currSet = 'pred'

    def getIteratorInfo(self):
        "current batch index and overall number of batches"
        if self.currSet == 'train':
            numBatches = int(np.floor(len(self.samples) / self.batchSize))  # train set: only full-sized batches
        else:
            numBatches = int(np.ceil(len(self.samples) / self.batchSize))  # val set: allow last batch to be smaller
        currBatch = self.currIdx // self.batchSize + 1
        return currBatch, numBatches

    def hasNext(self):
        "iterator"
        if self.currSet == 'train':
            return self.currIdx + self.batchSize <= len(self.samples)  # train set: only full-sized batches
        else:
            return self.currIdx < len(self.samples)  # val set: allow last batch to be smaller

    def getNext(self):
        "iterator"
        batchRange = range(self.currIdx, min(self.currIdx + self.batchSize, len(self.samples)))
        gtTexts = [self.samples[i].gtText for i in batchRange]

        imgs = []
        for i in batchRange:
            img = np.load(self.samples[i].filePath, allow_pickle=True)['img']
            imgs.append(img)

        self.currIdx += self.batchSize
        return Batch(gtTexts, imgs)

Adaptation 2 - of code in Model.py

In [49]:
import os
for d in ['model', 'dump']:
    if not os.path.exists(d):
        os.makedirs(d)
In [50]:
# Create list of all words
words = np.array(list(label_train) + list(label_val))
np.savetxt('model/corpus.txt', [' '.join(words)], fmt='%s')

# Create list of all characters
np.savetxt('model/charList.txt', [unique_letters], fmt='%s')
np.savetxt('model/wordCharList.txt', [unique_letters], fmt='%s')
In [51]:
import os
import tensorflow as tf

# Disable eager mode
tf.compat.v1.disable_eager_execution()
In [52]:
class DecoderType:
    BestPath = 0
    BeamSearch = 1
    WordBeamSearch = 2
In [53]:
class Model:
    "minimalistic TF model for HTR"

    # model constants
    imgSize = (256, 32)
    maxTextLen = 32

    def __init__(self, charList, decoderType=DecoderType.BestPath, mustRestore=False, dump=False, corpus=None):
        "init model: add CNN, RNN and CTC and initialize TF"
        self.dump = dump
        self.charList = charList
        self.decoderType = decoderType
        self.mustRestore = mustRestore
        self.snapID = 0
        self.corpus = corpus

        # Whether to use normalization over a batch or a population
        self.is_train = tf.compat.v1.placeholder(tf.bool, name='is_train')

        # input image batch
        self.inputImgs = tf.compat.v1.placeholder(tf.float32, shape=(None, Model.imgSize[0], Model.imgSize[1]))

        # setup CNN, RNN and CTC
        self.setupCNN()
        self.setupRNN()
        self.setupCTC()

        # setup optimizer to train NN
        self.batchesTrained = 0
        self.update_ops = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.UPDATE_OPS)
        with tf.control_dependencies(self.update_ops):
            self.optimizer = tf.compat.v1.train.AdamOptimizer().minimize(self.loss)

        # initialize TF
        (self.sess, self.saver) = self.setupTF()

    def setupCNN(self):
        "create CNN layers and return output of these layers"
        cnnIn4d = tf.expand_dims(input=self.inputImgs, axis=3)

        # list of parameters for the layers
        kernelVals = [5, 5, 3, 3, 3]
        featureVals = [1, 32, 64, 128, 128, 256]
        strideVals = poolVals = [(2, 2), (2, 2), (1, 2), (1, 2), (1, 2)]
        numLayers = len(strideVals)

        # create layers
        pool = cnnIn4d  # input to first CNN layer
        for i in range(numLayers):
            kernel = tf.Variable(
                tf.random.truncated_normal([kernelVals[i], kernelVals[i], featureVals[i], featureVals[i + 1]],
                                           stddev=0.1))
            conv = tf.nn.conv2d(input=pool, filters=kernel, padding='SAME', strides=(1, 1, 1, 1))
            conv_norm = tf.compat.v1.layers.batch_normalization(conv, training=self.is_train)
            relu = tf.nn.relu(conv_norm)
            pool = tf.nn.max_pool2d(input=relu, ksize=(1, poolVals[i][0], poolVals[i][1], 1),
                                    strides=(1, strideVals[i][0], strideVals[i][1], 1), padding='VALID')

        self.cnnOut4d = pool

    def setupRNN(self):
        "create RNN layers and return output of these layers"
        rnnIn3d = tf.squeeze(self.cnnOut4d, axis=[2])

        # basic cells which is used to build RNN
        numHidden = 256
        cells = [tf.compat.v1.nn.rnn_cell.LSTMCell(num_units=numHidden, state_is_tuple=True) for _ in
                 range(2)]  # 2 layers

        # stack basic cells
        stacked = tf.compat.v1.nn.rnn_cell.MultiRNNCell(cells, state_is_tuple=True)

        # bidirectional RNN
        # BxTxF -> BxTx2H
        ((fw, bw), _) = tf.compat.v1.nn.bidirectional_dynamic_rnn(cell_fw=stacked, cell_bw=stacked, inputs=rnnIn3d,
                                                                  dtype=rnnIn3d.dtype)

        # BxTxH + BxTxH -> BxTx2H -> BxTx1X2H
        concat = tf.expand_dims(tf.concat([fw, bw], 2), 2)

        # project output to chars (including blank): BxTx1x2H -> BxTx1xC -> BxTxC
        kernel = tf.Variable(tf.random.truncated_normal([1, 1, numHidden * 2, len(self.charList) + 1], stddev=0.1))
        self.rnnOut3d = tf.squeeze(tf.nn.atrous_conv2d(value=concat,
                                                       filters=kernel, rate=1, padding='SAME'), axis=[2])

    def setupCTC(self):
        "create CTC loss and decoder and return them"
        # BxTxC -> TxBxC
        self.ctcIn3dTBC = tf.transpose(a=self.rnnOut3d, perm=[1, 0, 2])
        # ground truth text as sparse tensor
        self.gtTexts = tf.SparseTensor(tf.compat.v1.placeholder(tf.int64, shape=[None, 2]),
                                       tf.compat.v1.placeholder(tf.int32, [None]),
                                       tf.compat.v1.placeholder(tf.int64, [2]))

        # calc loss for batch
        self.seqLen = tf.compat.v1.placeholder(tf.int32, [None])
        self.loss = tf.reduce_mean(input_tensor=tf.compat.v1.nn.ctc_loss(labels=self.gtTexts, inputs=self.ctcIn3dTBC,
                                                                         sequence_length=self.seqLen,
                                                                         ctc_merge_repeated=True))

        # calc loss for each element to compute label probability
        self.savedCtcInput = tf.compat.v1.placeholder(tf.float32,
                                                      shape=[Model.maxTextLen, None, len(self.charList) + 1])
        self.lossPerElement = tf.compat.v1.nn.ctc_loss(labels=self.gtTexts, inputs=self.savedCtcInput,
                                                       sequence_length=self.seqLen, ctc_merge_repeated=True)

        # decoder: either best path decoding or beam search decoding
        if self.decoderType == DecoderType.BestPath:
            self.decoder = tf.nn.ctc_greedy_decoder(inputs=self.ctcIn3dTBC, sequence_length=self.seqLen)
        elif self.decoderType == DecoderType.BeamSearch:
            self.decoder = tf.nn.ctc_beam_search_decoder(inputs=self.ctcIn3dTBC, sequence_length=self.seqLen,
                                                         beam_width=50)
        elif self.decoderType == DecoderType.WordBeamSearch:
            # import compiled word beam search operation (see https://github.com/githubharald/CTCWordBeamSearch)
            word_beam_search_module = tf.load_op_library('TFWordBeamSearch.so')

            # prepare information about language (dictionary, characters in dataset, characters forming words)
            chars = str().join(self.charList)
            wordChars = open('model/wordCharList.txt').read().splitlines()[0]
            corpus = open('model/corpus.txt').read()

            # decode using the "Words" mode of word beam search
            self.decoder = word_beam_search_module.word_beam_search(
                tf.nn.softmax(self.ctcIn3dTBC, axis=2), 50, 'Words',
                0.0, corpus.encode('utf8'), chars.encode('utf8'),
                wordChars.encode('utf8'))

    def setupTF(self):
        "initialize TF"
        print('Tensorflow: ' + tf.__version__)

        sess = tf.compat.v1.Session()  # TF session

        saver = tf.compat.v1.train.Saver(max_to_keep=1)  # saver saves model to file
        modelDir = 'model/'
        latestSnapshot = tf.train.latest_checkpoint(modelDir)  # is there a saved model?

        # if model must be restored (for inference), there must be a snapshot
        if self.mustRestore and not latestSnapshot:
            raise Exception('No saved model found in: ' + modelDir)

        # load saved model if available
        if latestSnapshot:
            print('Init with stored values from ' + latestSnapshot)
            saver.restore(sess, latestSnapshot)
        else:
            print('Init with new values')
            sess.run(tf.compat.v1.global_variables_initializer())

        return (sess, saver)

    def toSparse(self, texts):
        "put ground truth texts into sparse tensor for ctc_loss"
        indices = []
        values = []
        shape = [len(texts), 0]  # last entry must be max(labelList[i])

        # go over all texts
        for (batchElement, text) in enumerate(texts):
            # convert to string of label (i.e. class-ids)
            labelStr = [self.charList.index(c) for c in text]
            # sparse tensor must have size of max. label-string
            if len(labelStr) > shape[1]:
                shape[1] = len(labelStr)
            # put each label into sparse tensor
            for (i, label) in enumerate(labelStr):
                indices.append([batchElement, i])
                values.append(label)

        return (indices, values, shape)

    def decoderOutputToText(self, ctcOutput, batchSize):
        "extract texts from output of CTC decoder"

        # contains string of labels for each batch element
        encodedLabelStrs = [[] for i in range(batchSize)]

        # word beam search: label strings terminated by blank
        if self.decoderType == DecoderType.WordBeamSearch:
            blank = len(self.charList)
            for b in range(batchSize):
                for label in ctcOutput[b]:
                    if label == blank:
                        break
                    encodedLabelStrs[b].append(label)

        # TF decoders: label strings are contained in sparse tensor
        else:
            # ctc returns tuple, first element is SparseTensor
            decoded = ctcOutput[0][0]

            # go over all indices and save mapping: batch -> values
            idxDict = {b: [] for b in range(batchSize)}
            for (idx, idx2d) in enumerate(decoded.indices):
                label = decoded.values[idx]
                batchElement = idx2d[0]  # index according to [b,t]
                encodedLabelStrs[batchElement].append(label)

        # map labels to chars for all batch elements
        return [str().join([self.charList[c] for c in labelStr]) for labelStr in encodedLabelStrs]

    def trainBatch(self, batch):
        "feed a batch into the NN to train it"
        numBatchElements = len(batch.imgs)
        sparse = self.toSparse(batch.gtTexts)
        evalList = [self.optimizer, self.loss]
        feedDict = {self.inputImgs: batch.imgs,
                    self.gtTexts: sparse,
                    self.seqLen: [Model.maxTextLen] * numBatchElements,
                    self.is_train: True}
        _, lossVal = self.sess.run(evalList, feedDict)
        self.batchesTrained += 1
        return lossVal

    def dumpNNOutput(self, rnnOutput):
        "dump the output of the NN to CSV file(s)"
        dumpDir = 'dump/'
        if not os.path.isdir(dumpDir):
            os.mkdir(dumpDir)

        # iterate over all batch elements and create a CSV file for each one
        maxT, maxB, maxC = rnnOutput.shape
        for b in range(maxB):
            csv = ''
            for t in range(maxT):
                for c in range(maxC):
                    csv += str(rnnOutput[t, b, c]) + ';'
                csv += '\n'
            fn = dumpDir + 'rnnOutput_' + str(b) + '.csv'
            print('Write dump of NN to file: ' + fn)
            with open(fn, 'w') as f:
                f.write(csv)

    def inferBatch(self, batch, calcProbability=False, probabilityOfGT=False):
        "feed a batch into the NN to recognize the texts"

        # decode, optionally save RNN output
        numBatchElements = len(batch.imgs)
        evalRnnOutput = self.dump or calcProbability
        evalList = [self.decoder] + ([self.ctcIn3dTBC] if evalRnnOutput else [])
        feedDict = {self.inputImgs: batch.imgs, self.seqLen: [Model.maxTextLen] * numBatchElements,
                    self.is_train: False}
        evalRes = self.sess.run(evalList, feedDict)
        decoded = evalRes[0]
        texts = self.decoderOutputToText(decoded, numBatchElements)

        # feed RNN output and recognized text into CTC loss to compute labeling probability
        probs = None
        if calcProbability:
            sparse = self.toSparse(batch.gtTexts) if probabilityOfGT else self.toSparse(texts)
            ctcInput = evalRes[1]
            evalList = self.lossPerElement
            feedDict = {self.savedCtcInput: ctcInput, self.gtTexts: sparse,
                        self.seqLen: [Model.maxTextLen] * numBatchElements, self.is_train: False}
            lossVals = self.sess.run(evalList, feedDict)
            probs = np.exp(-lossVals)

        # dump the output of the NN to CSV file(s)
        if self.dump:
            self.dumpNNOutput(evalRes[1])

        return (texts, probs)

    def save(self):
        "save model to file"
        self.snapID += 1
        self.saver.save(self.sess, 'model/snapshot', global_step=self.snapID)

Adaptation 3 - of code in Main.py

In [54]:
import cv2
import editdistance
In [55]:
class FilePaths:
    "filenames and paths to data"
    fnCharList = 'model/charList.txt'
    fnAccuracy = 'model/accuracy.txt'
    fnInfer = 'data/test.png'
    fnCorpus = 'model/corpus.txt'

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.

In [56]:
def find_closest(word, corpus, thresh=2):
    """Correct typos in text based on corpus"""
    
    answer = []

    for check in word.split():
        # Compute distance to words in corpus
        dist = np.array([editdistance.eval(check, w) for w in corpus])

        # Replace words if close ones can be found, else leave them
        if len(np.argwhere(dist<=thresh)):
            check = corpus[dist.argmin()]
        answer.append(check)
    return ' '.join(answer)
In [57]:
def train(model, loader):
    "train NN"
    epoch = 0  # number of training epochs since start
    bestCharErrorRate = float('inf')  # best valdiation character error rate
    noImprovementSince = 0  # number of epochs no improvement of character error rate occured
    earlyStopping = 25  # stop training after this number of epochs without improvement
    while True:
        epoch += 1
        print('Epoch:', epoch)

        # train
        print('Train NN')
        loader.trainSet()
        while loader.hasNext():
            iterInfo = loader.getIteratorInfo()
            batch = loader.getNext()
            loss = model.trainBatch(batch)
            print(f'Epoch: {epoch} Batch: {iterInfo[0]}/{iterInfo[1]} Loss: {loss}')

        # validate
        charErrorRate = validate(model, loader)

        # if best validation accuracy so far, save model parameters
        if charErrorRate < bestCharErrorRate:
            print('Character error rate improved, save model')
            bestCharErrorRate = charErrorRate
            noImprovementSince = 0
            model.save()
            open(FilePaths.fnAccuracy, 'w').write(
                f'Validation character error rate of saved model: {charErrorRate * 100.0}%')
        else:
            print(f'Character error rate not improved, best so far: {bestCharErrorRate * 100.0}%')
            noImprovementSince += 1

        # stop training if no more improvement in the last x epochs
        if noImprovementSince >= earlyStopping:
            print(f'No more improvement since {earlyStopping} epochs. Training stopped.')
            break
In [58]:
def validate(model, loader):
    "validate NN"
    print('Validate NN')
    loader.validationSet()
    numCharErr = 0
    numCharTotal = 0
    numWordOK = 0
    numWordTotal = 0
    while loader.hasNext():
        iterInfo = loader.getIteratorInfo()
        print(f'Batch: {iterInfo[0]} / {iterInfo[1]}')
        batch = loader.getNext()
        (recognized, _) = model.inferBatch(batch)

        print('Ground truth -> Recognized')
        for i in range(len(recognized)):
            numWordOK += 1 if batch.gtTexts[i] == recognized[i] else 0
            numWordTotal += 1
            dist = editdistance.eval(recognized[i], batch.gtTexts[i])
            numCharErr += dist
            numCharTotal += len(batch.gtTexts[i])
            #print('[OK]' if dist == 0 else '[ERR:%d]' % dist, '"' + batch.gtTexts[i] + '"', '->', '"' + recognized[i] + '"')

    # print validation result
    charErrorRate = numCharErr / numCharTotal
    wordAccuracy = numWordOK / numWordTotal
    print(f'Character error rate: {charErrorRate * 100.0}%. Word accuracy: {wordAccuracy * 100.0}%.')
    return charErrorRate
In [59]:
def testtest(model, loader):
    "test NN"
    print('Test NN')
    loader.testSet()
    numCharErr = 0
    numCharTotal = 0
    numWordOK = 0
    numWordTotal = 0
    while loader.hasNext():
        iterInfo = loader.getIteratorInfo()
        print(f'Batch: {iterInfo[0]} / {iterInfo[1]}')
        batch = loader.getNext()
        (recognized, _) = model.inferBatch(batch)

        print('Ground truth -> Recognized')
        for i in range(len(recognized)):
            
            # Typo correction
            recognized[i] = find_closest(recognized[i], model.corpus)

            numWordOK += 1 if batch.gtTexts[i] == recognized[i] else 0
            numWordTotal += 1
            dist = editdistance.eval(recognized[i], batch.gtTexts[i])
            numCharErr += dist
            numCharTotal += len(batch.gtTexts[i])
            print('[OK]' if dist == 0 else '[ERR:%d]' % dist, '"' + batch.gtTexts[i] + '"', '->', '"' + recognized[i] + '"')

    # print test result
    charErrorRate = numCharErr / numCharTotal
    wordAccuracy = numWordOK / numWordTotal
    print(f'Character error rate: {charErrorRate * 100.0}%. Word accuracy: {wordAccuracy * 100.0}%.')
    return charErrorRate
In [60]:
def predpred(model, loader):
    
    # Collect response
    response = []
    
    "pred NN"
    print('Prediction NN')
    loader.predictionSet()
    while loader.hasNext():
        iterInfo = loader.getIteratorInfo()
        print(f'Batch: {iterInfo[0]} / {iterInfo[1]}')
        batch = loader.getNext()
        (recognized, _) = model.inferBatch(batch)

        for i in range(len(recognized)):
            
            # Typo correction
            recognized[i] = find_closest(recognized[i], model.corpus, thresh=2)
            response.append(recognized[i])

    return response

Step 5 - Run the model

Finding optimal batch size and number of epochs took some time, and was just based on trail and error.

In [68]:
# Specify model specific parameters
batch_size = 500
imgSize = (256, 32)
maxTextLen = 32
nEpoch = 25000

Train the model

In [69]:
# Specify parameters
decoderType = DecoderType.BeamSearch
loader = DataLoader(batch_size, imgSize, maxTextLen, nEpoch=nEpoch)
In [70]:
# Reset graph
tf.compat.v1.reset_default_graph()

# save characters of model for inference mode
open(FilePaths.fnCharList, 'w').write(str().join(loader.charList))

# save words contained in dataset into file
open(FilePaths.fnCorpus, 'w').write(str(' ').join(loader.trainWords + loader.validationWords))

# execute training or validation
model = Model(loader.charList, decoderType, corpus=word_corpus)
train(model, loader)
/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).
  '`tf.layers.batch_normalization` is deprecated and '
/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.
  warnings.warn('`layer.apply` is deprecated and '
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.
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.
Instructions for updating:
Please use `keras.layers.Bidirectional(keras.layers.RNN(cell))`, which is equivalent to this API
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.
Instructions for updating:
Please use `keras.layers.RNN(cell)`, which is equivalent to this API
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.
Instructions for updating:
Call initializer instance with the dtype argument instead of passing it to the constructor
/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.
  warnings.warn("`tf.nn.rnn_cell.LSTMCell` is deprecated and will be "
/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.
  warnings.warn('`layer.add_variable` is deprecated and '
Tensorflow: 2.4.0
Init with stored values from model/snapshot-3
INFO:tensorflow:Restoring parameters from model/snapshot-3
Epoch: 1
Train NN
Epoch: 1 Batch: 1/50 Loss: 0.11579028517007828
Epoch: 1 Batch: 2/50 Loss: 0.0868745744228363
Epoch: 1 Batch: 3/50 Loss: 0.13335715234279633
Epoch: 1 Batch: 4/50 Loss: 0.17490915954113007
Epoch: 1 Batch: 5/50 Loss: 0.14708039164543152
Epoch: 1 Batch: 6/50 Loss: 0.14854007959365845
Epoch: 1 Batch: 7/50 Loss: 0.0973290279507637
Epoch: 1 Batch: 8/50 Loss: 0.23460054397583008
Epoch: 1 Batch: 9/50 Loss: 0.138471320271492
Epoch: 1 Batch: 10/50 Loss: 0.13257314264774323
Epoch: 1 Batch: 11/50 Loss: 0.1029953882098198
Epoch: 1 Batch: 12/50 Loss: 0.15160636603832245
Epoch: 1 Batch: 13/50 Loss: 0.18332639336585999
Epoch: 1 Batch: 14/50 Loss: 0.2227000743150711
Epoch: 1 Batch: 15/50 Loss: 0.10308579355478287
Epoch: 1 Batch: 16/50 Loss: 0.10373742878437042
Epoch: 1 Batch: 17/50 Loss: 0.11266482621431351
Epoch: 1 Batch: 18/50 Loss: 0.11680487543344498
Epoch: 1 Batch: 19/50 Loss: 0.24134166538715363
Epoch: 1 Batch: 20/50 Loss: 0.12430744618177414
Epoch: 1 Batch: 21/50 Loss: 0.1312318593263626
Epoch: 1 Batch: 22/50 Loss: 0.1624596267938614
Epoch: 1 Batch: 23/50 Loss: 0.1432303935289383
Epoch: 1 Batch: 24/50 Loss: 0.21327371895313263
Epoch: 1 Batch: 25/50 Loss: 0.164026141166687
Epoch: 1 Batch: 26/50 Loss: 0.09636140614748001
Epoch: 1 Batch: 27/50 Loss: 0.128361776471138
Epoch: 1 Batch: 28/50 Loss: 0.10337819159030914
Epoch: 1 Batch: 29/50 Loss: 0.1733739972114563
Epoch: 1 Batch: 30/50 Loss: 0.11254748702049255
Epoch: 1 Batch: 31/50 Loss: 0.1759500354528427
Epoch: 1 Batch: 32/50 Loss: 0.11450458317995071
Epoch: 1 Batch: 33/50 Loss: 0.1410449743270874
Epoch: 1 Batch: 34/50 Loss: 0.13338056206703186
Epoch: 1 Batch: 35/50 Loss: 0.14250093698501587
Epoch: 1 Batch: 36/50 Loss: 0.15806788206100464
Epoch: 1 Batch: 37/50 Loss: 0.13288149237632751
Epoch: 1 Batch: 38/50 Loss: 0.14942428469657898
Epoch: 1 Batch: 39/50 Loss: 0.09776261448860168
Epoch: 1 Batch: 40/50 Loss: 0.09627821296453476
Epoch: 1 Batch: 41/50 Loss: 0.19292397797107697
Epoch: 1 Batch: 42/50 Loss: 0.1237221509218216
Epoch: 1 Batch: 43/50 Loss: 0.13541549444198608
Epoch: 1 Batch: 44/50 Loss: 0.15144950151443481
Epoch: 1 Batch: 45/50 Loss: 0.15170450508594513
Epoch: 1 Batch: 46/50 Loss: 0.15243643522262573
Epoch: 1 Batch: 47/50 Loss: 0.10972313582897186
Epoch: 1 Batch: 48/50 Loss: 0.09397879987955093
Epoch: 1 Batch: 49/50 Loss: 0.1336805373430252
Epoch: 1 Batch: 50/50 Loss: 0.09205459803342819
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 4.433996947449337%. Word accuracy: 77.6875%.
Character error rate improved, save model
Epoch: 2
Train NN
Epoch: 2 Batch: 1/50 Loss: 0.10117337107658386
Epoch: 2 Batch: 2/50 Loss: 0.11523067951202393
Epoch: 2 Batch: 3/50 Loss: 0.13114520907402039
Epoch: 2 Batch: 4/50 Loss: 0.12487310916185379
Epoch: 2 Batch: 5/50 Loss: 0.12923510372638702
Epoch: 2 Batch: 6/50 Loss: 0.13975705206394196
Epoch: 2 Batch: 7/50 Loss: 0.12472157180309296
Epoch: 2 Batch: 8/50 Loss: 0.13042248785495758
Epoch: 2 Batch: 9/50 Loss: 0.14074265956878662
Epoch: 2 Batch: 10/50 Loss: 0.08891132473945618
Epoch: 2 Batch: 11/50 Loss: 0.14652016758918762
Epoch: 2 Batch: 12/50 Loss: 0.10371917486190796
Epoch: 2 Batch: 13/50 Loss: 0.12820251286029816
Epoch: 2 Batch: 14/50 Loss: 0.064094178378582
Epoch: 2 Batch: 15/50 Loss: 0.13825152814388275
Epoch: 2 Batch: 16/50 Loss: 0.05951729789376259
Epoch: 2 Batch: 17/50 Loss: 0.07750429958105087
Epoch: 2 Batch: 18/50 Loss: 0.11327863484621048
Epoch: 2 Batch: 19/50 Loss: 0.08695909380912781
Epoch: 2 Batch: 20/50 Loss: 0.15584322810173035
Epoch: 2 Batch: 21/50 Loss: 0.16544730961322784
Epoch: 2 Batch: 22/50 Loss: 0.10321732610464096
Epoch: 2 Batch: 23/50 Loss: 0.16707158088684082
Epoch: 2 Batch: 24/50 Loss: 0.19464965164661407
Epoch: 2 Batch: 25/50 Loss: 0.10994695127010345
Epoch: 2 Batch: 26/50 Loss: 0.1698368936777115
Epoch: 2 Batch: 27/50 Loss: 0.15020553767681122
Epoch: 2 Batch: 28/50 Loss: 0.24588505923748016
Epoch: 2 Batch: 29/50 Loss: 0.20049743354320526
Epoch: 2 Batch: 30/50 Loss: 0.12356449663639069
Epoch: 2 Batch: 31/50 Loss: 0.41204965114593506
Epoch: 2 Batch: 32/50 Loss: 0.17869023978710175
Epoch: 2 Batch: 33/50 Loss: 0.2651899755001068
Epoch: 2 Batch: 34/50 Loss: 0.35347703099250793
Epoch: 2 Batch: 35/50 Loss: 0.4307447075843811
Epoch: 2 Batch: 36/50 Loss: 0.2976805865764618
Epoch: 2 Batch: 37/50 Loss: 0.21033556759357452
Epoch: 2 Batch: 38/50 Loss: 0.2872042953968048
Epoch: 2 Batch: 39/50 Loss: 0.27921125292778015
Epoch: 2 Batch: 40/50 Loss: 0.2543981671333313
Epoch: 2 Batch: 41/50 Loss: 0.30415448546409607
Epoch: 2 Batch: 42/50 Loss: 0.2561688721179962
Epoch: 2 Batch: 43/50 Loss: 0.23812417685985565
Epoch: 2 Batch: 44/50 Loss: 0.3327181935310364
Epoch: 2 Batch: 45/50 Loss: 0.20591312646865845
Epoch: 2 Batch: 46/50 Loss: 0.3000543713569641
Epoch: 2 Batch: 47/50 Loss: 0.2791275382041931
Epoch: 2 Batch: 48/50 Loss: 0.3513771891593933
Epoch: 2 Batch: 49/50 Loss: 0.30171358585357666
Epoch: 2 Batch: 50/50 Loss: 0.40190500020980835
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 5.362016911576297%. Word accuracy: 72.8125%.
Character error rate not improved, best so far: 4.433996947449337%
Epoch: 3
Train NN
Epoch: 3 Batch: 1/50 Loss: 0.37847527861595154
Epoch: 3 Batch: 2/50 Loss: 0.31805282831192017
Epoch: 3 Batch: 3/50 Loss: 0.3585386276245117
Epoch: 3 Batch: 4/50 Loss: 0.4701528251171112
Epoch: 3 Batch: 5/50 Loss: 0.26547595858573914
Epoch: 3 Batch: 6/50 Loss: 0.27179184556007385
Epoch: 3 Batch: 7/50 Loss: 0.23842965066432953
Epoch: 3 Batch: 8/50 Loss: 0.29307472705841064
Epoch: 3 Batch: 9/50 Loss: 0.37150853872299194
Epoch: 3 Batch: 10/50 Loss: 0.2690795361995697
Epoch: 3 Batch: 11/50 Loss: 0.2281680852174759
Epoch: 3 Batch: 12/50 Loss: 0.2083224058151245
Epoch: 3 Batch: 13/50 Loss: 0.24119937419891357
Epoch: 3 Batch: 14/50 Loss: 0.25130924582481384
Epoch: 3 Batch: 15/50 Loss: 0.2430817037820816
Epoch: 3 Batch: 16/50 Loss: 0.2865249514579773
Epoch: 3 Batch: 17/50 Loss: 0.23210293054580688
Epoch: 3 Batch: 18/50 Loss: 0.25623878836631775
Epoch: 3 Batch: 19/50 Loss: 0.32218343019485474
Epoch: 3 Batch: 20/50 Loss: 0.21976643800735474
Epoch: 3 Batch: 21/50 Loss: 0.2729943096637726
Epoch: 3 Batch: 22/50 Loss: 0.24966883659362793
Epoch: 3 Batch: 23/50 Loss: 0.37363553047180176
Epoch: 3 Batch: 24/50 Loss: 0.2795848548412323
Epoch: 3 Batch: 25/50 Loss: 0.20301933586597443
Epoch: 3 Batch: 26/50 Loss: 0.2386201173067093
Epoch: 3 Batch: 27/50 Loss: 0.19283059239387512
Epoch: 3 Batch: 28/50 Loss: 0.2802884876728058
Epoch: 3 Batch: 29/50 Loss: 0.23907050490379333
Epoch: 3 Batch: 30/50 Loss: 0.25457414984703064
Epoch: 3 Batch: 31/50 Loss: 0.2701925039291382
Epoch: 3 Batch: 32/50 Loss: 0.2717282772064209
Epoch: 3 Batch: 33/50 Loss: 0.29905715584754944
Epoch: 3 Batch: 34/50 Loss: 0.3098875880241394
Epoch: 3 Batch: 35/50 Loss: 0.22648479044437408
Epoch: 3 Batch: 36/50 Loss: 0.23341436684131622
Epoch: 3 Batch: 37/50 Loss: 0.2607979476451874
Epoch: 3 Batch: 38/50 Loss: 0.3569034934043884
Epoch: 3 Batch: 39/50 Loss: 0.1945188343524933
Epoch: 3 Batch: 40/50 Loss: 0.22963258624076843
Epoch: 3 Batch: 41/50 Loss: 0.376620888710022
Epoch: 3 Batch: 42/50 Loss: 0.46203362941741943
Epoch: 3 Batch: 43/50 Loss: 0.26767054200172424
Epoch: 3 Batch: 44/50 Loss: 0.3570062816143036
Epoch: 3 Batch: 45/50 Loss: 0.3552154302597046
Epoch: 3 Batch: 46/50 Loss: 0.2683231830596924
Epoch: 3 Batch: 47/50 Loss: 0.2274375557899475
Epoch: 3 Batch: 48/50 Loss: 0.44943109154701233
Epoch: 3 Batch: 49/50 Loss: 0.44442692399024963
Epoch: 3 Batch: 50/50 Loss: 0.3135325610637665
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 5.204933100121433%. Word accuracy: 74.2875%.
Character error rate not improved, best so far: 4.433996947449337%
Epoch: 4
Train NN
Epoch: 4 Batch: 1/50 Loss: 0.2760739028453827
Epoch: 4 Batch: 2/50 Loss: 0.2557814419269562
Epoch: 4 Batch: 3/50 Loss: 0.24654877185821533
Epoch: 4 Batch: 4/50 Loss: 0.26990312337875366
Epoch: 4 Batch: 5/50 Loss: 0.333682119846344
Epoch: 4 Batch: 6/50 Loss: 0.3109667897224426
Epoch: 4 Batch: 7/50 Loss: 0.44621652364730835
Epoch: 4 Batch: 8/50 Loss: 0.33693361282348633
Epoch: 4 Batch: 9/50 Loss: 0.2905413508415222
Epoch: 4 Batch: 10/50 Loss: 0.2760203182697296
Epoch: 4 Batch: 11/50 Loss: 0.2534785568714142
Epoch: 4 Batch: 12/50 Loss: 0.24782289564609528
Epoch: 4 Batch: 13/50 Loss: 0.26498714089393616
Epoch: 4 Batch: 14/50 Loss: 0.23175454139709473
Epoch: 4 Batch: 15/50 Loss: 0.3746224343776703
Epoch: 4 Batch: 16/50 Loss: 0.27582108974456787
Epoch: 4 Batch: 17/50 Loss: 0.31879034638404846
Epoch: 4 Batch: 18/50 Loss: 0.3024636507034302
Epoch: 4 Batch: 19/50 Loss: 0.4961569607257843
Epoch: 4 Batch: 20/50 Loss: 0.22289758920669556
Epoch: 4 Batch: 21/50 Loss: 0.5843725204467773
Epoch: 4 Batch: 22/50 Loss: 0.2595377564430237
Epoch: 4 Batch: 23/50 Loss: 0.29363927245140076
Epoch: 4 Batch: 24/50 Loss: 0.47457972168922424
Epoch: 4 Batch: 25/50 Loss: 0.46376460790634155
Epoch: 4 Batch: 26/50 Loss: 0.32904869318008423
Epoch: 4 Batch: 27/50 Loss: 0.3679184019565582
Epoch: 4 Batch: 28/50 Loss: 0.40635401010513306
Epoch: 4 Batch: 29/50 Loss: 0.41011494398117065
Epoch: 4 Batch: 30/50 Loss: 0.3032377064228058
Epoch: 4 Batch: 31/50 Loss: 0.3250954747200012
Epoch: 4 Batch: 32/50 Loss: 0.32201868295669556
Epoch: 4 Batch: 33/50 Loss: 0.2835899889469147
Epoch: 4 Batch: 34/50 Loss: 0.2841070592403412
Epoch: 4 Batch: 35/50 Loss: 0.2918672263622284
Epoch: 4 Batch: 36/50 Loss: 0.40070590376853943
Epoch: 4 Batch: 37/50 Loss: 0.3183540999889374
Epoch: 4 Batch: 38/50 Loss: 0.255553275346756
Epoch: 4 Batch: 39/50 Loss: 0.30765220522880554
Epoch: 4 Batch: 40/50 Loss: 0.42775484919548035
Epoch: 4 Batch: 41/50 Loss: 0.2968156337738037
Epoch: 4 Batch: 42/50 Loss: 0.2758021652698517
Epoch: 4 Batch: 43/50 Loss: 0.22496287524700165
Epoch: 4 Batch: 44/50 Loss: 0.3706851005554199
Epoch: 4 Batch: 45/50 Loss: 0.4308794438838959
Epoch: 4 Batch: 46/50 Loss: 0.37928685545921326
Epoch: 4 Batch: 47/50 Loss: 0.27114036679267883
Epoch: 4 Batch: 48/50 Loss: 0.3654005229473114
Epoch: 4 Batch: 49/50 Loss: 0.33603334426879883
Epoch: 4 Batch: 50/50 Loss: 0.31072089076042175
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 5.184879847595281%. Word accuracy: 73.7875%.
Character error rate not improved, best so far: 4.433996947449337%
Epoch: 5
Train NN
Epoch: 5 Batch: 1/50 Loss: 0.29826849699020386
Epoch: 5 Batch: 2/50 Loss: 0.26956823468208313
Epoch: 5 Batch: 3/50 Loss: 0.19840899109840393
Epoch: 5 Batch: 4/50 Loss: 0.32367241382598877
Epoch: 5 Batch: 5/50 Loss: 0.2946043014526367
Epoch: 5 Batch: 6/50 Loss: 0.2733305096626282
Epoch: 5 Batch: 7/50 Loss: 0.3940696120262146
Epoch: 5 Batch: 8/50 Loss: 0.2067144364118576
Epoch: 5 Batch: 9/50 Loss: 0.3145182728767395
Epoch: 5 Batch: 10/50 Loss: 0.4383223354816437
Epoch: 5 Batch: 11/50 Loss: 0.2648324966430664
Epoch: 5 Batch: 12/50 Loss: 0.37137776613235474
Epoch: 5 Batch: 13/50 Loss: 0.4268592596054077
Epoch: 5 Batch: 14/50 Loss: 0.2883690297603607
Epoch: 5 Batch: 15/50 Loss: 0.3038330078125
Epoch: 5 Batch: 16/50 Loss: 0.2778050899505615
Epoch: 5 Batch: 17/50 Loss: 0.28172674775123596
Epoch: 5 Batch: 18/50 Loss: 0.31707262992858887
Epoch: 5 Batch: 19/50 Loss: 0.3550703227519989
Epoch: 5 Batch: 20/50 Loss: 0.3402249217033386
Epoch: 5 Batch: 21/50 Loss: 0.345009446144104
Epoch: 5 Batch: 22/50 Loss: 0.29490670561790466
Epoch: 5 Batch: 23/50 Loss: 0.26833006739616394
Epoch: 5 Batch: 24/50 Loss: 0.32224076986312866
Epoch: 5 Batch: 25/50 Loss: 0.2840728759765625
Epoch: 5 Batch: 26/50 Loss: 0.27940815687179565
Epoch: 5 Batch: 27/50 Loss: 0.29796236753463745
Epoch: 5 Batch: 28/50 Loss: 0.3198803961277008
Epoch: 5 Batch: 29/50 Loss: 0.21975398063659668
Epoch: 5 Batch: 30/50 Loss: 0.2979229986667633
Epoch: 5 Batch: 31/50 Loss: 0.36521732807159424
Epoch: 5 Batch: 32/50 Loss: 0.3834449350833893
Epoch: 5 Batch: 33/50 Loss: 0.33918696641921997
Epoch: 5 Batch: 34/50 Loss: 0.2884886860847473
Epoch: 5 Batch: 35/50 Loss: 0.4235113263130188
Epoch: 5 Batch: 36/50 Loss: 0.22893214225769043
Epoch: 5 Batch: 37/50 Loss: 0.25723695755004883
Epoch: 5 Batch: 38/50 Loss: 0.32611560821533203
Epoch: 5 Batch: 39/50 Loss: 0.28279003500938416
Epoch: 5 Batch: 40/50 Loss: 0.29601866006851196
Epoch: 5 Batch: 41/50 Loss: 0.3165765702724457
Epoch: 5 Batch: 42/50 Loss: 0.43654346466064453
Epoch: 5 Batch: 43/50 Loss: 0.32398855686187744
Epoch: 5 Batch: 44/50 Loss: 0.2106330543756485
Epoch: 5 Batch: 45/50 Loss: 0.29479506611824036
Epoch: 5 Batch: 46/50 Loss: 0.34618908166885376
Epoch: 5 Batch: 47/50 Loss: 0.29926133155822754
Epoch: 5 Batch: 48/50 Loss: 0.28906628489494324
Epoch: 5 Batch: 49/50 Loss: 0.32548603415489197
Epoch: 5 Batch: 50/50 Loss: 0.3841811418533325
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 5.555865019329107%. Word accuracy: 71.46249999999999%.
Character error rate not improved, best so far: 4.433996947449337%
Epoch: 6
Train NN
Epoch: 6 Batch: 1/50 Loss: 0.25934118032455444
Epoch: 6 Batch: 2/50 Loss: 0.2735636830329895
Epoch: 6 Batch: 3/50 Loss: 0.2517126798629761
Epoch: 6 Batch: 4/50 Loss: 0.30514824390411377
Epoch: 6 Batch: 5/50 Loss: 0.3891216516494751
Epoch: 6 Batch: 6/50 Loss: 0.27850034832954407
Epoch: 6 Batch: 7/50 Loss: 0.2655998170375824
Epoch: 6 Batch: 8/50 Loss: 0.3948526084423065
Epoch: 6 Batch: 9/50 Loss: 0.3882589638233185
Epoch: 6 Batch: 10/50 Loss: 0.20321866869926453
Epoch: 6 Batch: 11/50 Loss: 0.2856283485889435
Epoch: 6 Batch: 12/50 Loss: 0.34669700264930725
Epoch: 6 Batch: 13/50 Loss: 0.2778487801551819
Epoch: 6 Batch: 14/50 Loss: 0.3115231692790985
Epoch: 6 Batch: 15/50 Loss: 0.21148058772087097
Epoch: 6 Batch: 16/50 Loss: 0.2574786841869354
Epoch: 6 Batch: 17/50 Loss: 0.2721075713634491
Epoch: 6 Batch: 18/50 Loss: 0.2129409909248352
Epoch: 6 Batch: 19/50 Loss: 0.2528429925441742
Epoch: 6 Batch: 20/50 Loss: 0.18482087552547455
Epoch: 6 Batch: 21/50 Loss: 0.20455528795719147
Epoch: 6 Batch: 22/50 Loss: 0.24193306267261505
Epoch: 6 Batch: 23/50 Loss: 0.17171688377857208
Epoch: 6 Batch: 24/50 Loss: 0.30990299582481384
Epoch: 6 Batch: 25/50 Loss: 0.19057589769363403
Epoch: 6 Batch: 26/50 Loss: 0.20242072641849518
Epoch: 6 Batch: 27/50 Loss: 0.23645611107349396
Epoch: 6 Batch: 28/50 Loss: 0.22515666484832764
Epoch: 6 Batch: 29/50 Loss: 0.29161328077316284
Epoch: 6 Batch: 30/50 Loss: 0.269281804561615
Epoch: 6 Batch: 31/50 Loss: 0.26118719577789307
Epoch: 6 Batch: 32/50 Loss: 0.26166999340057373
Epoch: 6 Batch: 33/50 Loss: 0.15892069041728973
Epoch: 6 Batch: 34/50 Loss: 0.2104623019695282
Epoch: 6 Batch: 35/50 Loss: 0.2435752898454666
Epoch: 6 Batch: 36/50 Loss: 0.23919548094272614
Epoch: 6 Batch: 37/50 Loss: 0.24366295337677002
Epoch: 6 Batch: 38/50 Loss: 0.3695705831050873
Epoch: 6 Batch: 39/50 Loss: 0.28474587202072144
Epoch: 6 Batch: 40/50 Loss: 0.2779007852077484
Epoch: 6 Batch: 41/50 Loss: 0.2610009014606476
Epoch: 6 Batch: 42/50 Loss: 0.24439339339733124
Epoch: 6 Batch: 43/50 Loss: 0.2964072823524475
Epoch: 6 Batch: 44/50 Loss: 0.3992901146411896
Epoch: 6 Batch: 45/50 Loss: 0.2332259714603424
Epoch: 6 Batch: 46/50 Loss: 0.38661444187164307
Epoch: 6 Batch: 47/50 Loss: 0.394309401512146
Epoch: 6 Batch: 48/50 Loss: 0.30134013295173645
Epoch: 6 Batch: 49/50 Loss: 0.38643524050712585
Epoch: 6 Batch: 50/50 Loss: 0.3722016215324402
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 5.2962868060739074%. Word accuracy: 72.91250000000001%.
Character error rate not improved, best so far: 4.433996947449337%
Epoch: 7
Train NN
Epoch: 7 Batch: 1/50 Loss: 0.31110677123069763
Epoch: 7 Batch: 2/50 Loss: 0.22227995097637177
Epoch: 7 Batch: 3/50 Loss: 0.26431989669799805
Epoch: 7 Batch: 4/50 Loss: 0.29722341895103455
Epoch: 7 Batch: 5/50 Loss: 0.389100044965744
Epoch: 7 Batch: 6/50 Loss: 0.3633110523223877
Epoch: 7 Batch: 7/50 Loss: 0.23258334398269653
Epoch: 7 Batch: 8/50 Loss: 0.329585462808609
Epoch: 7 Batch: 9/50 Loss: 0.2960280478000641
Epoch: 7 Batch: 10/50 Loss: 0.32090967893600464
Epoch: 7 Batch: 11/50 Loss: 0.31354284286499023
Epoch: 7 Batch: 12/50 Loss: 0.30470559000968933
Epoch: 7 Batch: 13/50 Loss: 0.20322756469249725
Epoch: 7 Batch: 14/50 Loss: 0.33829477429389954
Epoch: 7 Batch: 15/50 Loss: 0.27919840812683105
Epoch: 7 Batch: 16/50 Loss: 0.25047120451927185
Epoch: 7 Batch: 17/50 Loss: 0.2276224046945572
Epoch: 7 Batch: 18/50 Loss: 0.2714168429374695
Epoch: 7 Batch: 19/50 Loss: 0.2914205491542816
Epoch: 7 Batch: 20/50 Loss: 0.27856194972991943
Epoch: 7 Batch: 21/50 Loss: 0.23439668118953705
Epoch: 7 Batch: 22/50 Loss: 0.19796441495418549
Epoch: 7 Batch: 23/50 Loss: 0.2048191875219345
Epoch: 7 Batch: 24/50 Loss: 0.23042450845241547
Epoch: 7 Batch: 25/50 Loss: 0.2624954879283905
Epoch: 7 Batch: 26/50 Loss: 0.2394779920578003
Epoch: 7 Batch: 27/50 Loss: 0.26169851422309875
Epoch: 7 Batch: 28/50 Loss: 0.20884224772453308
Epoch: 7 Batch: 29/50 Loss: 0.38720354437828064
Epoch: 7 Batch: 30/50 Loss: 0.3126840591430664
Epoch: 7 Batch: 31/50 Loss: 0.22326260805130005
Epoch: 7 Batch: 32/50 Loss: 0.23557190597057343
Epoch: 7 Batch: 33/50 Loss: 0.21229323744773865
Epoch: 7 Batch: 34/50 Loss: 0.18968765437602997
Epoch: 7 Batch: 35/50 Loss: 0.23011183738708496
Epoch: 7 Batch: 36/50 Loss: 0.2217978686094284
Epoch: 7 Batch: 37/50 Loss: 0.19310075044631958
Epoch: 7 Batch: 38/50 Loss: 0.2267788052558899
Epoch: 7 Batch: 39/50 Loss: 0.16711187362670898
Epoch: 7 Batch: 40/50 Loss: 0.16583088040351868
Epoch: 7 Batch: 41/50 Loss: 0.39061108231544495
Epoch: 7 Batch: 42/50 Loss: 0.14648263156414032
Epoch: 7 Batch: 43/50 Loss: 0.3033650517463684
Epoch: 7 Batch: 44/50 Loss: 0.28040415048599243
Epoch: 7 Batch: 45/50 Loss: 0.2642107605934143
Epoch: 7 Batch: 46/50 Loss: 0.2746178209781647
Epoch: 7 Batch: 47/50 Loss: 0.25618210434913635
Epoch: 7 Batch: 48/50 Loss: 0.26893720030784607
Epoch: 7 Batch: 49/50 Loss: 0.36225005984306335
Epoch: 7 Batch: 50/50 Loss: 0.24665695428848267
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 5.324138545693564%. Word accuracy: 72.95%.
Character error rate not improved, best so far: 4.433996947449337%
Epoch: 8
Train NN
Epoch: 8 Batch: 1/50 Loss: 0.3317723274230957
Epoch: 8 Batch: 2/50 Loss: 0.19038259983062744
Epoch: 8 Batch: 3/50 Loss: 0.30752623081207275
Epoch: 8 Batch: 4/50 Loss: 0.24127143621444702
Epoch: 8 Batch: 5/50 Loss: 0.16286532580852509
Epoch: 8 Batch: 6/50 Loss: 0.23987413942813873
Epoch: 8 Batch: 7/50 Loss: 0.2115042805671692
Epoch: 8 Batch: 8/50 Loss: 0.20814044773578644
Epoch: 8 Batch: 9/50 Loss: 0.1848992109298706
Epoch: 8 Batch: 10/50 Loss: 0.14549203217029572
Epoch: 8 Batch: 11/50 Loss: 0.2328377515077591
Epoch: 8 Batch: 12/50 Loss: 0.2959938645362854
Epoch: 8 Batch: 13/50 Loss: 0.2072863131761551
Epoch: 8 Batch: 14/50 Loss: 0.3183950185775757
Epoch: 8 Batch: 15/50 Loss: 0.19327281415462494
Epoch: 8 Batch: 16/50 Loss: 0.24659526348114014
Epoch: 8 Batch: 17/50 Loss: 0.25256994366645813
Epoch: 8 Batch: 18/50 Loss: 0.209935262799263
Epoch: 8 Batch: 19/50 Loss: 0.23995432257652283
Epoch: 8 Batch: 20/50 Loss: 0.18765492737293243
Epoch: 8 Batch: 21/50 Loss: 0.21548637747764587
Epoch: 8 Batch: 22/50 Loss: 0.21185754239559174
Epoch: 8 Batch: 23/50 Loss: 0.1760212481021881
Epoch: 8 Batch: 24/50 Loss: 0.2765423655509949
Epoch: 8 Batch: 25/50 Loss: 0.20438140630722046
Epoch: 8 Batch: 26/50 Loss: 0.19844366610050201
Epoch: 8 Batch: 27/50 Loss: 0.1829649657011032
Epoch: 8 Batch: 28/50 Loss: 0.17864815890789032
Epoch: 8 Batch: 29/50 Loss: 0.1900290548801422
Epoch: 8 Batch: 30/50 Loss: 0.19955569505691528
Epoch: 8 Batch: 31/50 Loss: 0.21873103082180023
Epoch: 8 Batch: 32/50 Loss: 0.21576720476150513
Epoch: 8 Batch: 33/50 Loss: 0.22696135938167572
Epoch: 8 Batch: 34/50 Loss: 0.1642141193151474
Epoch: 8 Batch: 35/50 Loss: 0.18339107930660248
Epoch: 8 Batch: 36/50 Loss: 0.235735222697258
Epoch: 8 Batch: 37/50 Loss: 0.20080609619617462
Epoch: 8 Batch: 38/50 Loss: 0.2554597556591034
Epoch: 8 Batch: 39/50 Loss: 0.18105390667915344
Epoch: 8 Batch: 40/50 Loss: 0.19967219233512878
Epoch: 8 Batch: 41/50 Loss: 0.15628790855407715
Epoch: 8 Batch: 42/50 Loss: 0.24234452843666077
Epoch: 8 Batch: 43/50 Loss: 0.14999517798423767
Epoch: 8 Batch: 44/50 Loss: 0.15205906331539154
Epoch: 8 Batch: 45/50 Loss: 0.14888468384742737
Epoch: 8 Batch: 46/50 Loss: 0.14533592760562897
Epoch: 8 Batch: 47/50 Loss: 0.2568250298500061
Epoch: 8 Batch: 48/50 Loss: 0.1882786601781845
Epoch: 8 Batch: 49/50 Loss: 0.16074968874454498
Epoch: 8 Batch: 50/50 Loss: 0.17405062913894653
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 4.720312830739408%. Word accuracy: 76.2%.
Character error rate not improved, best so far: 4.433996947449337%
Epoch: 9
Train NN
Epoch: 9 Batch: 1/50 Loss: 0.15458348393440247
Epoch: 9 Batch: 2/50 Loss: 0.13375452160835266
Epoch: 9 Batch: 3/50 Loss: 0.22415611147880554
Epoch: 9 Batch: 4/50 Loss: 0.16979937255382538
Epoch: 9 Batch: 5/50 Loss: 0.16221997141838074
Epoch: 9 Batch: 6/50 Loss: 0.17243336141109467
Epoch: 9 Batch: 7/50 Loss: 0.13954946398735046
Epoch: 9 Batch: 8/50 Loss: 0.17361673712730408
Epoch: 9 Batch: 9/50 Loss: 0.23260122537612915
Epoch: 9 Batch: 10/50 Loss: 0.17975473403930664
Epoch: 9 Batch: 11/50 Loss: 0.1637134850025177
Epoch: 9 Batch: 12/50 Loss: 0.17344807088375092
Epoch: 9 Batch: 13/50 Loss: 0.25261157751083374
Epoch: 9 Batch: 14/50 Loss: 0.2383480668067932
Epoch: 9 Batch: 15/50 Loss: 0.24540410935878754
Epoch: 9 Batch: 16/50 Loss: 0.16637827455997467
Epoch: 9 Batch: 17/50 Loss: 0.1960511952638626
Epoch: 9 Batch: 18/50 Loss: 0.18918606638908386
Epoch: 9 Batch: 19/50 Loss: 0.26057562232017517
Epoch: 9 Batch: 20/50 Loss: 0.37098151445388794
Epoch: 9 Batch: 21/50 Loss: 0.21826598048210144
Epoch: 9 Batch: 22/50 Loss: 0.3349151313304901
Epoch: 9 Batch: 23/50 Loss: 0.260900616645813
Epoch: 9 Batch: 24/50 Loss: 0.3175099194049835
Epoch: 9 Batch: 25/50 Loss: 0.3061996400356293
Epoch: 9 Batch: 26/50 Loss: 0.2735917866230011
Epoch: 9 Batch: 27/50 Loss: 0.19215838611125946
Epoch: 9 Batch: 28/50 Loss: 0.1749027669429779
Epoch: 9 Batch: 29/50 Loss: 0.43773001432418823
Epoch: 9 Batch: 30/50 Loss: 0.23160578310489655
Epoch: 9 Batch: 31/50 Loss: 0.2436215728521347
Epoch: 9 Batch: 32/50 Loss: 0.35368111729621887
Epoch: 9 Batch: 33/50 Loss: 0.26157623529434204
Epoch: 9 Batch: 34/50 Loss: 0.2137773483991623
Epoch: 9 Batch: 35/50 Loss: 0.30238425731658936
Epoch: 9 Batch: 36/50 Loss: 0.2697015702724457
Epoch: 9 Batch: 37/50 Loss: 0.22654223442077637
Epoch: 9 Batch: 38/50 Loss: 0.27139243483543396
Epoch: 9 Batch: 39/50 Loss: 0.3117079436779022
Epoch: 9 Batch: 40/50 Loss: 0.285111665725708
Epoch: 9 Batch: 41/50 Loss: 0.2564476728439331
Epoch: 9 Batch: 42/50 Loss: 0.2755676805973053
Epoch: 9 Batch: 43/50 Loss: 0.29364556074142456
Epoch: 9 Batch: 44/50 Loss: 0.2373111993074417
Epoch: 9 Batch: 45/50 Loss: 0.28823402523994446
Epoch: 9 Batch: 46/50 Loss: 0.38558322191238403
Epoch: 9 Batch: 47/50 Loss: 0.23358580470085144
Epoch: 9 Batch: 48/50 Loss: 0.30579495429992676
Epoch: 9 Batch: 49/50 Loss: 0.2973112463951111
Epoch: 9 Batch: 50/50 Loss: 0.3323134779930115
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 42.1073740265817%. Word accuracy: 1.8624999999999998%.
Character error rate not improved, best so far: 4.433996947449337%
Epoch: 10
Train NN
Epoch: 10 Batch: 1/50 Loss: 0.2405553162097931
Epoch: 10 Batch: 2/50 Loss: 0.31272855401039124
Epoch: 10 Batch: 3/50 Loss: 0.4254525303840637
Epoch: 10 Batch: 4/50 Loss: 0.308671236038208
Epoch: 10 Batch: 5/50 Loss: 0.4529847502708435
Epoch: 10 Batch: 6/50 Loss: 0.3375054597854614
Epoch: 10 Batch: 7/50 Loss: 0.22764918208122253
Epoch: 10 Batch: 8/50 Loss: 0.28584739565849304
Epoch: 10 Batch: 9/50 Loss: 0.3864656984806061
Epoch: 10 Batch: 10/50 Loss: 0.2688930034637451
Epoch: 10 Batch: 11/50 Loss: 0.35482603311538696
Epoch: 10 Batch: 12/50 Loss: 0.36009126901626587
Epoch: 10 Batch: 13/50 Loss: 0.2844719886779785
Epoch: 10 Batch: 14/50 Loss: 0.3877105414867401
Epoch: 10 Batch: 15/50 Loss: 0.34967634081840515
Epoch: 10 Batch: 16/50 Loss: 0.358124315738678
Epoch: 10 Batch: 17/50 Loss: 0.20885518193244934
Epoch: 10 Batch: 18/50 Loss: 0.2460610568523407
Epoch: 10 Batch: 19/50 Loss: 0.3903960585594177
Epoch: 10 Batch: 20/50 Loss: 0.3590409755706787
Epoch: 10 Batch: 21/50 Loss: 0.3264564573764801
Epoch: 10 Batch: 22/50 Loss: 0.5116735100746155
Epoch: 10 Batch: 23/50 Loss: 0.23173636198043823
Epoch: 10 Batch: 24/50 Loss: 0.25731056928634644
Epoch: 10 Batch: 25/50 Loss: 0.416312575340271
Epoch: 10 Batch: 26/50 Loss: 0.33092382550239563
Epoch: 10 Batch: 27/50 Loss: 0.2629295289516449
Epoch: 10 Batch: 28/50 Loss: 0.2972758114337921
Epoch: 10 Batch: 29/50 Loss: 0.3823186457157135
Epoch: 10 Batch: 30/50 Loss: 0.32518377900123596
Epoch: 10 Batch: 31/50 Loss: 0.2797832787036896
Epoch: 10 Batch: 32/50 Loss: 0.22460900247097015
Epoch: 10 Batch: 33/50 Loss: 0.20064517855644226
Epoch: 10 Batch: 34/50 Loss: 0.35192105174064636
Epoch: 10 Batch: 35/50 Loss: 0.29487714171409607
Epoch: 10 Batch: 36/50 Loss: 0.27320927381515503
Epoch: 10 Batch: 37/50 Loss: 0.19010013341903687
Epoch: 10 Batch: 38/50 Loss: 0.24300545454025269
Epoch: 10 Batch: 39/50 Loss: 0.37789395451545715
Epoch: 10 Batch: 40/50 Loss: 0.21449045836925507
Epoch: 10 Batch: 41/50 Loss: 0.37589678168296814
Epoch: 10 Batch: 42/50 Loss: 0.28900229930877686
Epoch: 10 Batch: 43/50 Loss: 0.2140674889087677
Epoch: 10 Batch: 44/50 Loss: 0.3446773588657379
Epoch: 10 Batch: 45/50 Loss: 0.2741883397102356
Epoch: 10 Batch: 46/50 Loss: 0.21072326600551605
Epoch: 10 Batch: 47/50 Loss: 0.3905622661113739
Epoch: 10 Batch: 48/50 Loss: 0.342966765165329
Epoch: 10 Batch: 49/50 Loss: 0.35994186997413635
Epoch: 10 Batch: 50/50 Loss: 0.2715403735637665
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 5.2862601798108315%. Word accuracy: 73.45%.
Character error rate not improved, best so far: 4.433996947449337%
Epoch: 11
Train NN
Epoch: 11 Batch: 1/50 Loss: 0.24077922105789185
Epoch: 11 Batch: 2/50 Loss: 0.2814844250679016
Epoch: 11 Batch: 3/50 Loss: 0.25843754410743713
Epoch: 11 Batch: 4/50 Loss: 0.21819168329238892
Epoch: 11 Batch: 5/50 Loss: 0.297860324382782
Epoch: 11 Batch: 6/50 Loss: 0.34788212180137634
Epoch: 11 Batch: 7/50 Loss: 0.2259323000907898
Epoch: 11 Batch: 8/50 Loss: 0.320919930934906
Epoch: 11 Batch: 9/50 Loss: 0.2943657338619232
Epoch: 11 Batch: 10/50 Loss: 0.23052459955215454
Epoch: 11 Batch: 11/50 Loss: 0.21922150254249573
Epoch: 11 Batch: 12/50 Loss: 0.2326476126909256
Epoch: 11 Batch: 13/50 Loss: 0.24602071940898895
Epoch: 11 Batch: 14/50 Loss: 0.30806317925453186
Epoch: 11 Batch: 15/50 Loss: 0.31298327445983887
Epoch: 11 Batch: 16/50 Loss: 0.25355762243270874
Epoch: 11 Batch: 17/50 Loss: 0.36586594581604004
Epoch: 11 Batch: 18/50 Loss: 0.31722402572631836
Epoch: 11 Batch: 19/50 Loss: 0.4524058997631073
Epoch: 11 Batch: 20/50 Loss: 0.2950882911682129
Epoch: 11 Batch: 21/50 Loss: 0.2787682116031647
Epoch: 11 Batch: 22/50 Loss: 0.3539491295814514
Epoch: 11 Batch: 23/50 Loss: 0.30058637261390686
Epoch: 11 Batch: 24/50 Loss: 0.32445934414863586
Epoch: 11 Batch: 25/50 Loss: 0.40457600355148315
Epoch: 11 Batch: 26/50 Loss: 0.2607375681400299
Epoch: 11 Batch: 27/50 Loss: 0.36476144194602966
Epoch: 11 Batch: 28/50 Loss: 0.394209086894989
Epoch: 11 Batch: 29/50 Loss: 0.32934072613716125
Epoch: 11 Batch: 30/50 Loss: 0.30627354979515076
Epoch: 11 Batch: 31/50 Loss: 0.35764119029045105
Epoch: 11 Batch: 32/50 Loss: 0.2397671788930893
Epoch: 11 Batch: 33/50 Loss: 0.330594003200531
Epoch: 11 Batch: 34/50 Loss: 0.3433588147163391
Epoch: 11 Batch: 35/50 Loss: 0.2824525237083435
Epoch: 11 Batch: 36/50 Loss: 0.308584064245224
Epoch: 11 Batch: 37/50 Loss: 0.34827280044555664
Epoch: 11 Batch: 38/50 Loss: 0.3178927004337311
Epoch: 11 Batch: 39/50 Loss: 0.25132718682289124
Epoch: 11 Batch: 40/50 Loss: 0.2908515930175781
Epoch: 11 Batch: 41/50 Loss: 0.30968788266181946
Epoch: 11 Batch: 42/50 Loss: 0.26973965764045715
Epoch: 11 Batch: 43/50 Loss: 0.25503990054130554
Epoch: 11 Batch: 44/50 Loss: 0.25615832209587097
Epoch: 11 Batch: 45/50 Loss: 0.2704838812351227
Epoch: 11 Batch: 46/50 Loss: 0.31890109181404114
Epoch: 11 Batch: 47/50 Loss: 0.2544901669025421
Epoch: 11 Batch: 48/50 Loss: 0.2480565905570984
Epoch: 11 Batch: 49/50 Loss: 0.4698520302772522
Epoch: 11 Batch: 50/50 Loss: 0.3426333963871002
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 5.388754581611168%. Word accuracy: 72.39999999999999%.
Character error rate not improved, best so far: 4.433996947449337%
Epoch: 12
Train NN
Epoch: 12 Batch: 1/50 Loss: 0.1994258612394333
Epoch: 12 Batch: 2/50 Loss: 0.24001416563987732
Epoch: 12 Batch: 3/50 Loss: 0.20982661843299866
Epoch: 12 Batch: 4/50 Loss: 0.3199710547924042
Epoch: 12 Batch: 5/50 Loss: 0.3279452323913574
Epoch: 12 Batch: 6/50 Loss: 0.30738645792007446
Epoch: 12 Batch: 7/50 Loss: 0.40228354930877686
Epoch: 12 Batch: 8/50 Loss: 0.2528194189071655
Epoch: 12 Batch: 9/50 Loss: 0.2841728627681732
Epoch: 12 Batch: 10/50 Loss: 0.20384261012077332
Epoch: 12 Batch: 11/50 Loss: 0.2076055109500885
Epoch: 12 Batch: 12/50 Loss: 0.2764286696910858
Epoch: 12 Batch: 13/50 Loss: 0.20998945832252502
Epoch: 12 Batch: 14/50 Loss: 0.22579681873321533
Epoch: 12 Batch: 15/50 Loss: 0.254591703414917
Epoch: 12 Batch: 16/50 Loss: 0.24695679545402527
Epoch: 12 Batch: 17/50 Loss: 0.27850818634033203
Epoch: 12 Batch: 18/50 Loss: 0.27971190214157104
Epoch: 12 Batch: 19/50 Loss: 0.16171224415302277
Epoch: 12 Batch: 20/50 Loss: 0.17799656093120575
Epoch: 12 Batch: 21/50 Loss: 0.2454291135072708
Epoch: 12 Batch: 22/50 Loss: 0.3197686970233917
Epoch: 12 Batch: 23/50 Loss: 0.27224642038345337
Epoch: 12 Batch: 24/50 Loss: 0.26615625619888306
Epoch: 12 Batch: 25/50 Loss: 0.1659485101699829
Epoch: 12 Batch: 26/50 Loss: 0.3055580258369446
Epoch: 12 Batch: 27/50 Loss: 0.26526057720184326
Epoch: 12 Batch: 28/50 Loss: 0.23647017776966095
Epoch: 12 Batch: 29/50 Loss: 0.20619279146194458
Epoch: 12 Batch: 30/50 Loss: 0.2582274377346039
Epoch: 12 Batch: 31/50 Loss: 0.26580652594566345
Epoch: 12 Batch: 32/50 Loss: 0.24260792136192322
Epoch: 12 Batch: 33/50 Loss: 0.2958255708217621
Epoch: 12 Batch: 34/50 Loss: 0.2705859839916229
Epoch: 12 Batch: 35/50 Loss: 0.19418326020240784
Epoch: 12 Batch: 36/50 Loss: 0.2061665952205658
Epoch: 12 Batch: 37/50 Loss: 0.4105445444583893
Epoch: 12 Batch: 38/50 Loss: 0.25119924545288086
Epoch: 12 Batch: 39/50 Loss: 0.2267966866493225
Epoch: 12 Batch: 40/50 Loss: 0.20724652707576752
Epoch: 12 Batch: 41/50 Loss: 0.47250768542289734
Epoch: 12 Batch: 42/50 Loss: 0.2752871513366699
Epoch: 12 Batch: 43/50 Loss: 0.22894561290740967
Epoch: 12 Batch: 44/50 Loss: 0.2895902395248413
Epoch: 12 Batch: 45/50 Loss: 0.2594504952430725
Epoch: 12 Batch: 46/50 Loss: 0.2107611745595932
Epoch: 12 Batch: 47/50 Loss: 0.29586049914360046
Epoch: 12 Batch: 48/50 Loss: 0.2445235699415207
Epoch: 12 Batch: 49/50 Loss: 0.24358898401260376
Epoch: 12 Batch: 50/50 Loss: 0.24217242002487183
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 4.944240817281447%. Word accuracy: 74.4875%.
Character error rate not improved, best so far: 4.433996947449337%
Epoch: 13
Train NN
Epoch: 13 Batch: 1/50 Loss: 0.27283975481987
Epoch: 13 Batch: 2/50 Loss: 0.19103612005710602
Epoch: 13 Batch: 3/50 Loss: 0.2729508578777313
Epoch: 13 Batch: 4/50 Loss: 0.19857388734817505
Epoch: 13 Batch: 5/50 Loss: 0.17859436571598053
Epoch: 13 Batch: 6/50 Loss: 0.3146194517612457
Epoch: 13 Batch: 7/50 Loss: 0.24670547246932983
Epoch: 13 Batch: 8/50 Loss: 0.2594357430934906
Epoch: 13 Batch: 9/50 Loss: 0.23323434591293335
Epoch: 13 Batch: 10/50 Loss: 0.2820914387702942
Epoch: 13 Batch: 11/50 Loss: 0.24967525899410248
Epoch: 13 Batch: 12/50 Loss: 0.2783384323120117
Epoch: 13 Batch: 13/50 Loss: 0.28770413994789124
Epoch: 13 Batch: 14/50 Loss: 0.2779575288295746
Epoch: 13 Batch: 15/50 Loss: 0.22218598425388336
Epoch: 13 Batch: 16/50 Loss: 0.2256261706352234
Epoch: 13 Batch: 17/50 Loss: 0.2363010197877884
Epoch: 13 Batch: 18/50 Loss: 0.274007648229599
Epoch: 13 Batch: 19/50 Loss: 0.2155025750398636
Epoch: 13 Batch: 20/50 Loss: 0.24511976540088654
Epoch: 13 Batch: 21/50 Loss: 0.3067079484462738
Epoch: 13 Batch: 22/50 Loss: 0.2580171525478363
Epoch: 13 Batch: 23/50 Loss: 0.258230060338974
Epoch: 13 Batch: 24/50 Loss: 0.25186488032341003
Epoch: 13 Batch: 25/50 Loss: 0.2709946036338806
Epoch: 13 Batch: 26/50 Loss: 0.295587956905365
Epoch: 13 Batch: 27/50 Loss: 0.27514174580574036
Epoch: 13 Batch: 28/50 Loss: 0.18607524037361145
Epoch: 13 Batch: 29/50 Loss: 0.20949788391590118
Epoch: 13 Batch: 30/50 Loss: 0.2762579917907715
Epoch: 13 Batch: 31/50 Loss: 0.2099863886833191
Epoch: 13 Batch: 32/50 Loss: 0.30494198203086853
Epoch: 13 Batch: 33/50 Loss: 0.2259085476398468
Epoch: 13 Batch: 34/50 Loss: 0.26630184054374695
Epoch: 13 Batch: 35/50 Loss: 0.2822740077972412
Epoch: 13 Batch: 36/50 Loss: 0.30318307876586914
Epoch: 13 Batch: 37/50 Loss: 0.307071715593338
Epoch: 13 Batch: 38/50 Loss: 0.2531990706920624
Epoch: 13 Batch: 39/50 Loss: 0.22928504645824432
Epoch: 13 Batch: 40/50 Loss: 0.29842084646224976
Epoch: 13 Batch: 41/50 Loss: 0.21838052570819855
Epoch: 13 Batch: 42/50 Loss: 0.250920832157135
Epoch: 13 Batch: 43/50 Loss: 0.30492377281188965
Epoch: 13 Batch: 44/50 Loss: 0.30438968539237976
Epoch: 13 Batch: 45/50 Loss: 0.3689911961555481
Epoch: 13 Batch: 46/50 Loss: 0.27362164855003357
Epoch: 13 Batch: 47/50 Loss: 0.2536216080188751
Epoch: 13 Batch: 48/50 Loss: 0.1863022893667221
Epoch: 13 Batch: 49/50 Loss: 0.248416930437088
Epoch: 13 Batch: 50/50 Loss: 0.18394964933395386
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 5.478994217978855%. Word accuracy: 72.15%.
Character error rate not improved, best so far: 4.433996947449337%
Epoch: 14
Train NN
Epoch: 14 Batch: 1/50 Loss: 0.28550779819488525
Epoch: 14 Batch: 2/50 Loss: 0.2787267863750458
Epoch: 14 Batch: 3/50 Loss: 0.21949568390846252
Epoch: 14 Batch: 4/50 Loss: 0.2163211852312088
Epoch: 14 Batch: 5/50 Loss: 0.2264135628938675
Epoch: 14 Batch: 6/50 Loss: 0.20514343678951263
Epoch: 14 Batch: 7/50 Loss: 0.20940493047237396
Epoch: 14 Batch: 8/50 Loss: 0.16949501633644104
Epoch: 14 Batch: 9/50 Loss: 0.18175597488880157
Epoch: 14 Batch: 10/50 Loss: 0.22507062554359436
Epoch: 14 Batch: 11/50 Loss: 0.2829805910587311
Epoch: 14 Batch: 12/50 Loss: 0.22972169518470764
Epoch: 14 Batch: 13/50 Loss: 0.1933216005563736
Epoch: 14 Batch: 14/50 Loss: 0.22507044672966003
Epoch: 14 Batch: 15/50 Loss: 0.28305870294570923
Epoch: 14 Batch: 16/50 Loss: 0.2747447192668915
Epoch: 14 Batch: 17/50 Loss: 0.1649346798658371
Epoch: 14 Batch: 18/50 Loss: 0.2788730561733246
Epoch: 14 Batch: 19/50 Loss: 0.5730648040771484
Epoch: 14 Batch: 20/50 Loss: 0.24634502828121185
Epoch: 14 Batch: 21/50 Loss: 0.2779015004634857
Epoch: 14 Batch: 22/50 Loss: 0.2775740921497345
Epoch: 14 Batch: 23/50 Loss: 0.22861911356449127
Epoch: 14 Batch: 24/50 Loss: 0.3119569718837738
Epoch: 14 Batch: 25/50 Loss: 0.29006052017211914
Epoch: 14 Batch: 26/50 Loss: 0.49193060398101807
Epoch: 14 Batch: 27/50 Loss: 0.41440117359161377
Epoch: 14 Batch: 28/50 Loss: 0.4233855903148651
Epoch: 14 Batch: 29/50 Loss: 0.38248005509376526
Epoch: 14 Batch: 30/50 Loss: 0.4895121157169342
Epoch: 14 Batch: 31/50 Loss: 0.3915610611438751
Epoch: 14 Batch: 32/50 Loss: 0.4108458161354065
Epoch: 14 Batch: 33/50 Loss: 0.3804076313972473
Epoch: 14 Batch: 34/50 Loss: 0.5085347294807434
Epoch: 14 Batch: 35/50 Loss: 0.39561522006988525
Epoch: 14 Batch: 36/50 Loss: 0.34715735912323
Epoch: 14 Batch: 37/50 Loss: 0.41644471883773804
Epoch: 14 Batch: 38/50 Loss: 0.341899573802948
Epoch: 14 Batch: 39/50 Loss: 0.35617324709892273
Epoch: 14 Batch: 40/50 Loss: 0.4454517662525177
Epoch: 14 Batch: 41/50 Loss: 0.266406774520874
Epoch: 14 Batch: 42/50 Loss: 0.2806122899055481
Epoch: 14 Batch: 43/50 Loss: 0.30145660042762756
Epoch: 14 Batch: 44/50 Loss: 0.26661232113838196
Epoch: 14 Batch: 45/50 Loss: 0.2940489947795868
Epoch: 14 Batch: 46/50 Loss: 0.47555139660835266
Epoch: 14 Batch: 47/50 Loss: 0.2821667194366455
Epoch: 14 Batch: 48/50 Loss: 0.2421911358833313
Epoch: 14 Batch: 49/50 Loss: 0.3670616149902344
Epoch: 14 Batch: 50/50 Loss: 0.3412722647190094
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 6.247702231481378%. Word accuracy: 66.7625%.
Character error rate not improved, best so far: 4.433996947449337%
Epoch: 15
Train NN
Epoch: 15 Batch: 1/50 Loss: 0.2377638965845108
Epoch: 15 Batch: 2/50 Loss: 0.2704204022884369
Epoch: 15 Batch: 3/50 Loss: 0.38540118932724
Epoch: 15 Batch: 4/50 Loss: 0.2742641866207123
Epoch: 15 Batch: 5/50 Loss: 0.4178571403026581
Epoch: 15 Batch: 6/50 Loss: 0.29585063457489014
Epoch: 15 Batch: 7/50 Loss: 0.2461620718240738
Epoch: 15 Batch: 8/50 Loss: 0.6901635527610779
Epoch: 15 Batch: 9/50 Loss: 0.23296129703521729
Epoch: 15 Batch: 10/50 Loss: 0.7257495522499084
Epoch: 15 Batch: 11/50 Loss: 0.6670804619789124
Epoch: 15 Batch: 12/50 Loss: 0.41411206126213074
Epoch: 15 Batch: 13/50 Loss: 0.34983524680137634
Epoch: 15 Batch: 14/50 Loss: 0.35172200202941895
Epoch: 15 Batch: 15/50 Loss: 0.5302627086639404
Epoch: 15 Batch: 16/50 Loss: 0.7532660365104675
Epoch: 15 Batch: 17/50 Loss: 0.4075804054737091
Epoch: 15 Batch: 18/50 Loss: 0.564159095287323
Epoch: 15 Batch: 19/50 Loss: 0.6095283031463623
Epoch: 15 Batch: 20/50 Loss: 0.5535184741020203
Epoch: 15 Batch: 21/50 Loss: 0.41808220744132996
Epoch: 15 Batch: 22/50 Loss: 0.5010271668434143
Epoch: 15 Batch: 23/50 Loss: 0.4239647388458252
Epoch: 15 Batch: 24/50 Loss: 0.4398926794528961
Epoch: 15 Batch: 25/50 Loss: 0.39533036947250366
Epoch: 15 Batch: 26/50 Loss: 0.5475241541862488
Epoch: 15 Batch: 27/50 Loss: 0.37975218892097473
Epoch: 15 Batch: 28/50 Loss: 0.5579019784927368
Epoch: 15 Batch: 29/50 Loss: 0.5211500525474548
Epoch: 15 Batch: 30/50 Loss: 0.4510171711444855
Epoch: 15 Batch: 31/50 Loss: 0.46879294514656067
Epoch: 15 Batch: 32/50 Loss: 0.34150904417037964
Epoch: 15 Batch: 33/50 Loss: 0.5367166996002197
Epoch: 15 Batch: 34/50 Loss: 0.4306623935699463
Epoch: 15 Batch: 35/50 Loss: 0.4555385112762451
Epoch: 15 Batch: 36/50 Loss: 0.4903481602668762
Epoch: 15 Batch: 37/50 Loss: 0.48624634742736816
Epoch: 15 Batch: 38/50 Loss: 0.4466812014579773
Epoch: 15 Batch: 39/50 Loss: 0.5336242318153381
Epoch: 15 Batch: 40/50 Loss: 0.4397558271884918
Epoch: 15 Batch: 41/50 Loss: 0.4879392385482788
Epoch: 15 Batch: 42/50 Loss: 0.5301083326339722
Epoch: 15 Batch: 43/50 Loss: 0.4632718563079834
Epoch: 15 Batch: 44/50 Loss: 0.44043368101119995
Epoch: 15 Batch: 45/50 Loss: 0.42275694012641907
Epoch: 15 Batch: 46/50 Loss: 0.4964486062526703
Epoch: 15 Batch: 47/50 Loss: 0.5570999979972839
Epoch: 15 Batch: 48/50 Loss: 0.3832918107509613
Epoch: 15 Batch: 49/50 Loss: 0.4557211995124817
Epoch: 15 Batch: 50/50 Loss: 0.5757319927215576
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 5.151457760051692%. Word accuracy: 73.55000000000001%.
Character error rate not improved, best so far: 4.433996947449337%
Epoch: 16
Train NN
Epoch: 16 Batch: 1/50 Loss: 0.3236285150051117
Epoch: 16 Batch: 2/50 Loss: 0.3972335755825043
Epoch: 16 Batch: 3/50 Loss: 0.508807361125946
Epoch: 16 Batch: 4/50 Loss: 0.5080168843269348
Epoch: 16 Batch: 5/50 Loss: 0.3933616578578949
Epoch: 16 Batch: 6/50 Loss: 0.46179652214050293
Epoch: 16 Batch: 7/50 Loss: 0.5172654986381531
Epoch: 16 Batch: 8/50 Loss: 0.5002099275588989
Epoch: 16 Batch: 9/50 Loss: 0.5011656880378723
Epoch: 16 Batch: 10/50 Loss: 0.487667441368103
Epoch: 16 Batch: 11/50 Loss: 0.4491559863090515
Epoch: 16 Batch: 12/50 Loss: 0.46724504232406616
Epoch: 16 Batch: 13/50 Loss: 0.43319687247276306
Epoch: 16 Batch: 14/50 Loss: 0.4126914143562317
Epoch: 16 Batch: 15/50 Loss: 0.5802550315856934
Epoch: 16 Batch: 16/50 Loss: 0.4025368392467499
Epoch: 16 Batch: 17/50 Loss: 0.4860393702983856
Epoch: 16 Batch: 18/50 Loss: 0.3748273253440857
Epoch: 16 Batch: 19/50 Loss: 0.4045239984989166
Epoch: 16 Batch: 20/50 Loss: 0.5277163982391357
Epoch: 16 Batch: 21/50 Loss: 0.4991509020328522
Epoch: 16 Batch: 22/50 Loss: 0.5712252855300903
Epoch: 16 Batch: 23/50 Loss: 0.35888412594795227
Epoch: 16 Batch: 24/50 Loss: 0.4760914742946625
Epoch: 16 Batch: 25/50 Loss: 0.8456259965896606
Epoch: 16 Batch: 26/50 Loss: 0.3729091286659241
Epoch: 16 Batch: 27/50 Loss: 0.4284523129463196
Epoch: 16 Batch: 28/50 Loss: 0.4477807581424713
Epoch: 16 Batch: 29/50 Loss: 0.5555457472801208
Epoch: 16 Batch: 30/50 Loss: 0.48125243186950684
Epoch: 16 Batch: 31/50 Loss: 0.4842211604118347
Epoch: 16 Batch: 32/50 Loss: 0.4407903254032135
Epoch: 16 Batch: 33/50 Loss: 0.48350343108177185
Epoch: 16 Batch: 34/50 Loss: 0.5657813549041748
Epoch: 16 Batch: 35/50 Loss: 0.5726830959320068
Epoch: 16 Batch: 36/50 Loss: 0.4539206922054291
Epoch: 16 Batch: 37/50 Loss: 0.5030955672264099
Epoch: 16 Batch: 38/50 Loss: 0.6084316968917847
Epoch: 16 Batch: 39/50 Loss: 0.4911748170852661
Epoch: 16 Batch: 40/50 Loss: 0.5081448554992676
Epoch: 16 Batch: 41/50 Loss: 0.3763558864593506
Epoch: 16 Batch: 42/50 Loss: 0.613945484161377
Epoch: 16 Batch: 43/50 Loss: 0.47285330295562744
Epoch: 16 Batch: 44/50 Loss: 0.4143272042274475
Epoch: 16 Batch: 45/50 Loss: 0.6904090642929077
Epoch: 16 Batch: 46/50 Loss: 0.41206884384155273
Epoch: 16 Batch: 47/50 Loss: 0.3025805354118347
Epoch: 16 Batch: 48/50 Loss: 0.5009528398513794
Epoch: 16 Batch: 49/50 Loss: 0.4727630317211151
Epoch: 16 Batch: 50/50 Loss: 0.510701596736908
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 15.40981049676363%. Word accuracy: 26.9125%.
Character error rate not improved, best so far: 4.433996947449337%
Epoch: 17
Train NN
Epoch: 17 Batch: 1/50 Loss: 0.3418782651424408
Epoch: 17 Batch: 2/50 Loss: 0.48295682668685913
Epoch: 17 Batch: 3/50 Loss: 0.3397791385650635
Epoch: 17 Batch: 4/50 Loss: 0.543099582195282
Epoch: 17 Batch: 5/50 Loss: 0.42905884981155396
Epoch: 17 Batch: 6/50 Loss: 0.5066623091697693
Epoch: 17 Batch: 7/50 Loss: 0.3701668083667755
Epoch: 17 Batch: 8/50 Loss: 0.45219096541404724
Epoch: 17 Batch: 9/50 Loss: 0.3434106707572937
Epoch: 17 Batch: 10/50 Loss: 0.466286301612854
Epoch: 17 Batch: 11/50 Loss: 0.4372049570083618
Epoch: 17 Batch: 12/50 Loss: 0.36199432611465454
Epoch: 17 Batch: 13/50 Loss: 0.383320689201355
Epoch: 17 Batch: 14/50 Loss: 0.39827844500541687
Epoch: 17 Batch: 15/50 Loss: 0.27163729071617126
Epoch: 17 Batch: 16/50 Loss: 0.37058165669441223
Epoch: 17 Batch: 17/50 Loss: 0.32633131742477417
Epoch: 17 Batch: 18/50 Loss: 0.34547048807144165
Epoch: 17 Batch: 19/50 Loss: 0.3514903783798218
Epoch: 17 Batch: 20/50 Loss: 0.38481172919273376
Epoch: 17 Batch: 21/50 Loss: 0.33566588163375854
Epoch: 17 Batch: 22/50 Loss: 0.2736770808696747
Epoch: 17 Batch: 23/50 Loss: 0.43338102102279663
Epoch: 17 Batch: 24/50 Loss: 0.34895777702331543
Epoch: 17 Batch: 25/50 Loss: 0.3525674343109131
Epoch: 17 Batch: 26/50 Loss: 0.38210493326187134
Epoch: 17 Batch: 27/50 Loss: 0.31792181730270386
Epoch: 17 Batch: 28/50 Loss: 0.417338490486145
Epoch: 17 Batch: 29/50 Loss: 0.33750009536743164
Epoch: 17 Batch: 30/50 Loss: 0.4168227016925812
Epoch: 17 Batch: 31/50 Loss: 0.29779255390167236
Epoch: 17 Batch: 32/50 Loss: 0.2769959270954132
Epoch: 17 Batch: 33/50 Loss: 0.2624788284301758
Epoch: 17 Batch: 34/50 Loss: 0.3432704210281372
Epoch: 17 Batch: 35/50 Loss: 0.2669176161289215
Epoch: 17 Batch: 36/50 Loss: 0.1935691386461258
Epoch: 17 Batch: 37/50 Loss: 0.2482854127883911
Epoch: 17 Batch: 38/50 Loss: 0.2633110284805298
Epoch: 17 Batch: 39/50 Loss: 0.2934773862361908
Epoch: 17 Batch: 40/50 Loss: 0.2848869264125824
Epoch: 17 Batch: 41/50 Loss: 0.2827744781970978
Epoch: 17 Batch: 42/50 Loss: 0.2822949290275574
Epoch: 17 Batch: 43/50 Loss: 0.33530113101005554
Epoch: 17 Batch: 44/50 Loss: 0.1758122444152832
Epoch: 17 Batch: 45/50 Loss: 0.20802763104438782
Epoch: 17 Batch: 46/50 Loss: 0.1921202540397644
Epoch: 17 Batch: 47/50 Loss: 0.22450530529022217
Epoch: 17 Batch: 48/50 Loss: 0.2940964698791504
Epoch: 17 Batch: 49/50 Loss: 0.1947614997625351
Epoch: 17 Batch: 50/50 Loss: 0.21004274487495422
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 4.929757912679226%. Word accuracy: 74.5625%.
Character error rate not improved, best so far: 4.433996947449337%
Epoch: 18
Train NN
Epoch: 18 Batch: 1/50 Loss: 0.18200454115867615
Epoch: 18 Batch: 2/50 Loss: 0.2923153340816498
Epoch: 18 Batch: 3/50 Loss: 0.2115183025598526
Epoch: 18 Batch: 4/50 Loss: 0.2393067330121994
Epoch: 18 Batch: 5/50 Loss: 0.31647902727127075
Epoch: 18 Batch: 6/50 Loss: 0.29006460309028625
Epoch: 18 Batch: 7/50 Loss: 0.20227529108524323
Epoch: 18 Batch: 8/50 Loss: 0.2913445830345154
Epoch: 18 Batch: 9/50 Loss: 0.2314857840538025
Epoch: 18 Batch: 10/50 Loss: 0.23206199705600739
Epoch: 18 Batch: 11/50 Loss: 0.3119303584098816
Epoch: 18 Batch: 12/50 Loss: 0.20269420742988586
Epoch: 18 Batch: 13/50 Loss: 0.32825008034706116
Epoch: 18 Batch: 14/50 Loss: 0.26874279975891113
Epoch: 18 Batch: 15/50 Loss: 0.30183109641075134
Epoch: 18 Batch: 16/50 Loss: 0.28206467628479004
Epoch: 18 Batch: 17/50 Loss: 0.2588060200214386
Epoch: 18 Batch: 18/50 Loss: 0.2631988525390625
Epoch: 18 Batch: 19/50 Loss: 0.19935736060142517
Epoch: 18 Batch: 20/50 Loss: 0.1466466784477234
Epoch: 18 Batch: 21/50 Loss: 0.2841337323188782
Epoch: 18 Batch: 22/50 Loss: 0.23912367224693298
Epoch: 18 Batch: 23/50 Loss: 0.3096224367618561
Epoch: 18 Batch: 24/50 Loss: 0.22533613443374634
Epoch: 18 Batch: 25/50 Loss: 0.20870059728622437
Epoch: 18 Batch: 26/50 Loss: 0.20261073112487793
Epoch: 18 Batch: 27/50 Loss: 0.14520566165447235
Epoch: 18 Batch: 28/50 Loss: 0.2809116244316101
Epoch: 18 Batch: 29/50 Loss: 0.2100089192390442
Epoch: 18 Batch: 30/50 Loss: 0.3723892867565155
Epoch: 18 Batch: 31/50 Loss: 0.3104584515094757
Epoch: 18 Batch: 32/50 Loss: 0.35511380434036255
Epoch: 18 Batch: 33/50 Loss: 0.2422257512807846
Epoch: 18 Batch: 34/50 Loss: 0.22305427491664886
Epoch: 18 Batch: 35/50 Loss: 0.3111613988876343
Epoch: 18 Batch: 36/50 Loss: 0.2781287729740143
Epoch: 18 Batch: 37/50 Loss: 0.2947453558444977
Epoch: 18 Batch: 38/50 Loss: 0.2880460023880005
Epoch: 18 Batch: 39/50 Loss: 0.28047943115234375
Epoch: 18 Batch: 40/50 Loss: 0.3574451804161072
Epoch: 18 Batch: 41/50 Loss: 0.3399255573749542
Epoch: 18 Batch: 42/50 Loss: 0.28984788060188293
Epoch: 18 Batch: 43/50 Loss: 0.3343707323074341
Epoch: 18 Batch: 44/50 Loss: 0.24616672098636627
Epoch: 18 Batch: 45/50 Loss: 0.20173096656799316
Epoch: 18 Batch: 46/50 Loss: 0.23324017226696014
Epoch: 18 Batch: 47/50 Loss: 0.27544382214546204
Epoch: 18 Batch: 48/50 Loss: 0.28572073578834534
Epoch: 18 Batch: 49/50 Loss: 0.26578646898269653
Epoch: 18 Batch: 50/50 Loss: 0.21629755198955536
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 4.933100121433585%. Word accuracy: 75.05%.
Character error rate not improved, best so far: 4.433996947449337%
Epoch: 19
Train NN
Epoch: 19 Batch: 1/50 Loss: 0.19109253585338593
Epoch: 19 Batch: 2/50 Loss: 0.30138304829597473
Epoch: 19 Batch: 3/50 Loss: 0.18046395480632782
Epoch: 19 Batch: 4/50 Loss: 0.15682362020015717
Epoch: 19 Batch: 5/50 Loss: 0.27281415462493896
Epoch: 19 Batch: 6/50 Loss: 0.23384830355644226
Epoch: 19 Batch: 7/50 Loss: 0.2272077351808548
Epoch: 19 Batch: 8/50 Loss: 0.28848797082901
Epoch: 19 Batch: 9/50 Loss: 0.21224740147590637
Epoch: 19 Batch: 10/50 Loss: 0.2002609521150589
Epoch: 19 Batch: 11/50 Loss: 0.2584865689277649
Epoch: 19 Batch: 12/50 Loss: 0.33535289764404297
Epoch: 19 Batch: 13/50 Loss: 0.2521410584449768
Epoch: 19 Batch: 14/50 Loss: 0.405119389295578
Epoch: 19 Batch: 15/50 Loss: 0.3410692512989044
Epoch: 19 Batch: 16/50 Loss: 0.30363962054252625
Epoch: 19 Batch: 17/50 Loss: 0.3098481297492981
Epoch: 19 Batch: 18/50 Loss: 0.2233618199825287
Epoch: 19 Batch: 19/50 Loss: 0.29867881536483765
Epoch: 19 Batch: 20/50 Loss: 0.31095731258392334
Epoch: 19 Batch: 21/50 Loss: 0.20387226343154907
Epoch: 19 Batch: 22/50 Loss: 0.2922869324684143
Epoch: 19 Batch: 23/50 Loss: 0.22952382266521454
Epoch: 19 Batch: 24/50 Loss: 0.22751210629940033
Epoch: 19 Batch: 25/50 Loss: 0.3077145218849182
Epoch: 19 Batch: 26/50 Loss: 0.1681368201971054
Epoch: 19 Batch: 27/50 Loss: 0.19854331016540527
Epoch: 19 Batch: 28/50 Loss: 0.2452334612607956
Epoch: 19 Batch: 29/50 Loss: 0.41227301955223083
Epoch: 19 Batch: 30/50 Loss: 0.32823094725608826
Epoch: 19 Batch: 31/50 Loss: 0.21534141898155212
Epoch: 19 Batch: 32/50 Loss: 0.19911538064479828
Epoch: 19 Batch: 33/50 Loss: 0.30801621079444885
Epoch: 19 Batch: 34/50 Loss: 0.21774300932884216
Epoch: 19 Batch: 35/50 Loss: 0.1763625293970108
Epoch: 19 Batch: 36/50 Loss: 0.22744424641132355
Epoch: 19 Batch: 37/50 Loss: 0.22296489775180817
Epoch: 19 Batch: 38/50 Loss: 0.2818143665790558
Epoch: 19 Batch: 39/50 Loss: 0.27875423431396484
Epoch: 19 Batch: 40/50 Loss: 0.23363830149173737
Epoch: 19 Batch: 41/50 Loss: 0.32979726791381836
Epoch: 19 Batch: 42/50 Loss: 0.1953638792037964
Epoch: 19 Batch: 43/50 Loss: 0.2092418372631073
Epoch: 19 Batch: 44/50 Loss: 0.3828337490558624
Epoch: 19 Batch: 45/50 Loss: 0.13415662944316864
Epoch: 19 Batch: 46/50 Loss: 0.3465953469276428
Epoch: 19 Batch: 47/50 Loss: 0.17098551988601685
Epoch: 19 Batch: 48/50 Loss: 0.1725003719329834
Epoch: 19 Batch: 49/50 Loss: 0.3136105537414551
Epoch: 19 Batch: 50/50 Loss: 0.20636561512947083
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 4.456278339145063%. Word accuracy: 77.2625%.
Character error rate not improved, best so far: 4.433996947449337%
Epoch: 20
Train NN
Epoch: 20 Batch: 1/50 Loss: 0.20477604866027832
Epoch: 20 Batch: 2/50 Loss: 0.27207350730895996
Epoch: 20 Batch: 3/50 Loss: 0.18678408861160278
Epoch: 20 Batch: 4/50 Loss: 0.239658385515213
Epoch: 20 Batch: 5/50 Loss: 0.21397772431373596
Epoch: 20 Batch: 6/50 Loss: 0.16129738092422485
Epoch: 20 Batch: 7/50 Loss: 0.2580011487007141
Epoch: 20 Batch: 8/50 Loss: 0.21159911155700684
Epoch: 20 Batch: 9/50 Loss: 0.1433742195367813
Epoch: 20 Batch: 10/50 Loss: 0.22318856418132782
Epoch: 20 Batch: 11/50 Loss: 0.19957292079925537
Epoch: 20 Batch: 12/50 Loss: 0.18849007785320282
Epoch: 20 Batch: 13/50 Loss: 0.17635971307754517
Epoch: 20 Batch: 14/50 Loss: 0.19370664656162262
Epoch: 20 Batch: 15/50 Loss: 0.24760845303535461
Epoch: 20 Batch: 16/50 Loss: 0.19369076192378998
Epoch: 20 Batch: 17/50 Loss: 0.25453710556030273
Epoch: 20 Batch: 18/50 Loss: 0.26673752069473267
Epoch: 20 Batch: 19/50 Loss: 0.25666290521621704
Epoch: 20 Batch: 20/50 Loss: 0.2504693865776062
Epoch: 20 Batch: 21/50 Loss: 0.22556942701339722
Epoch: 20 Batch: 22/50 Loss: 0.2180265486240387
Epoch: 20 Batch: 23/50 Loss: 0.3665105402469635
Epoch: 20 Batch: 24/50 Loss: 0.21233394742012024
Epoch: 20 Batch: 25/50 Loss: 0.30067434906959534
Epoch: 20 Batch: 26/50 Loss: 0.1938941478729248
Epoch: 20 Batch: 27/50 Loss: 0.1710345596075058
Epoch: 20 Batch: 28/50 Loss: 0.24500325322151184
Epoch: 20 Batch: 29/50 Loss: 0.25554752349853516
Epoch: 20 Batch: 30/50 Loss: 0.35788920521736145
Epoch: 20 Batch: 31/50 Loss: 0.16089092195034027
Epoch: 20 Batch: 32/50 Loss: 0.27017223834991455
Epoch: 20 Batch: 33/50 Loss: 0.3604779541492462
Epoch: 20 Batch: 34/50 Loss: 0.18934382498264313
Epoch: 20 Batch: 35/50 Loss: 0.22847995162010193
Epoch: 20 Batch: 36/50 Loss: 0.1995006799697876
Epoch: 20 Batch: 37/50 Loss: 0.16099469363689423
Epoch: 20 Batch: 38/50 Loss: 0.27005261182785034
Epoch: 20 Batch: 39/50 Loss: 0.22414495050907135
Epoch: 20 Batch: 40/50 Loss: 0.2139393389225006
Epoch: 20 Batch: 41/50 Loss: 0.20490078628063202
Epoch: 20 Batch: 42/50 Loss: 0.23103168606758118
Epoch: 20 Batch: 43/50 Loss: 0.24864518642425537
Epoch: 20 Batch: 44/50 Loss: 0.27086520195007324
Epoch: 20 Batch: 45/50 Loss: 0.15450720489025116
Epoch: 20 Batch: 46/50 Loss: 0.2896835207939148
Epoch: 20 Batch: 47/50 Loss: 0.17072413861751556
Epoch: 20 Batch: 48/50 Loss: 0.23178699612617493
Epoch: 20 Batch: 49/50 Loss: 0.20408421754837036
Epoch: 20 Batch: 50/50 Loss: 0.18713104724884033
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 4.618932498523858%. Word accuracy: 76.14999999999999%.
Character error rate not improved, best so far: 4.433996947449337%
Epoch: 21
Train NN
Epoch: 21 Batch: 1/50 Loss: 0.132852703332901
Epoch: 21 Batch: 2/50 Loss: 0.14357474446296692
Epoch: 21 Batch: 3/50 Loss: 0.13361041247844696
Epoch: 21 Batch: 4/50 Loss: 0.15566639602184296
Epoch: 21 Batch: 5/50 Loss: 0.1858004480600357
Epoch: 21 Batch: 6/50 Loss: 0.21773318946361542
Epoch: 21 Batch: 7/50 Loss: 0.21902936697006226
Epoch: 21 Batch: 8/50 Loss: 0.2525743544101715
Epoch: 21 Batch: 9/50 Loss: 0.18620368838310242
Epoch: 21 Batch: 10/50 Loss: 0.18319688737392426
Epoch: 21 Batch: 11/50 Loss: 0.23197734355926514
Epoch: 21 Batch: 12/50 Loss: 0.1802426427602768
Epoch: 21 Batch: 13/50 Loss: 0.1679973602294922
Epoch: 21 Batch: 14/50 Loss: 0.1590358316898346
Epoch: 21 Batch: 15/50 Loss: 0.13629047572612762
Epoch: 21 Batch: 16/50 Loss: 0.30392810702323914
Epoch: 21 Batch: 17/50 Loss: 0.18402275443077087
Epoch: 21 Batch: 18/50 Loss: 0.12152761965990067
Epoch: 21 Batch: 19/50 Loss: 0.11604472249746323
Epoch: 21 Batch: 20/50 Loss: 0.13135313987731934
Epoch: 21 Batch: 21/50 Loss: 0.16245704889297485
Epoch: 21 Batch: 22/50 Loss: 0.11137571930885315
Epoch: 21 Batch: 23/50 Loss: 0.1275842934846878
Epoch: 21 Batch: 24/50 Loss: 0.14651112258434296
Epoch: 21 Batch: 25/50 Loss: 0.15669958293437958
Epoch: 21 Batch: 26/50 Loss: 0.1481507271528244
Epoch: 21 Batch: 27/50 Loss: 0.14924177527427673
Epoch: 21 Batch: 28/50 Loss: 0.1756376475095749
Epoch: 21 Batch: 29/50 Loss: 0.26526907086372375
Epoch: 21 Batch: 30/50 Loss: 0.10717087984085083
Epoch: 21 Batch: 31/50 Loss: 0.14224959909915924
Epoch: 21 Batch: 32/50 Loss: 0.24987785518169403
Epoch: 21 Batch: 33/50 Loss: 0.24034184217453003
Epoch: 21 Batch: 34/50 Loss: 0.4233112633228302
Epoch: 21 Batch: 35/50 Loss: 0.17955327033996582
Epoch: 21 Batch: 36/50 Loss: 0.13854321837425232
Epoch: 21 Batch: 37/50 Loss: 0.13083060085773468
Epoch: 21 Batch: 38/50 Loss: 0.11298935860395432
Epoch: 21 Batch: 39/50 Loss: 0.19894906878471375
Epoch: 21 Batch: 40/50 Loss: 0.274223268032074
Epoch: 21 Batch: 41/50 Loss: 0.2121247500181198
Epoch: 21 Batch: 42/50 Loss: 0.22041647136211395
Epoch: 21 Batch: 43/50 Loss: 0.19952057301998138
Epoch: 21 Batch: 44/50 Loss: 0.19449478387832642
Epoch: 21 Batch: 45/50 Loss: 0.18096709251403809
Epoch: 21 Batch: 46/50 Loss: 0.1657758355140686
Epoch: 21 Batch: 47/50 Loss: 0.12200365215539932
Epoch: 21 Batch: 48/50 Loss: 0.16407863795757294
Epoch: 21 Batch: 49/50 Loss: 0.2245144098997116
Epoch: 21 Batch: 50/50 Loss: 0.12581083178520203
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 4.878510711779057%. Word accuracy: 74.95%.
Character error rate not improved, best so far: 4.433996947449337%
Epoch: 22
Train NN
Epoch: 22 Batch: 1/50 Loss: 0.16972622275352478
Epoch: 22 Batch: 2/50 Loss: 0.27923426032066345
Epoch: 22 Batch: 3/50 Loss: 0.17151996493339539
Epoch: 22 Batch: 4/50 Loss: 0.21309061348438263
Epoch: 22 Batch: 5/50 Loss: 0.15540793538093567
Epoch: 22 Batch: 6/50 Loss: 0.14361971616744995
Epoch: 22 Batch: 7/50 Loss: 0.2340191751718521
Epoch: 22 Batch: 8/50 Loss: 0.20373575389385223
Epoch: 22 Batch: 9/50 Loss: 0.1753719300031662
Epoch: 22 Batch: 10/50 Loss: 0.1500532031059265
Epoch: 22 Batch: 11/50 Loss: 0.26949793100357056
Epoch: 22 Batch: 12/50 Loss: 0.17647844552993774
Epoch: 22 Batch: 13/50 Loss: 0.2748395502567291
Epoch: 22 Batch: 14/50 Loss: 0.18158115446567535
Epoch: 22 Batch: 15/50 Loss: 0.330680251121521
Epoch: 22 Batch: 16/50 Loss: 0.18852731585502625
Epoch: 22 Batch: 17/50 Loss: 0.20983023941516876
Epoch: 22 Batch: 18/50 Loss: 0.2651125192642212
Epoch: 22 Batch: 19/50 Loss: 0.18317756056785583
Epoch: 22 Batch: 20/50 Loss: 0.1545751839876175
Epoch: 22 Batch: 21/50 Loss: 0.1937844157218933
Epoch: 22 Batch: 22/50 Loss: 0.18623074889183044
Epoch: 22 Batch: 23/50 Loss: 0.19485464692115784
Epoch: 22 Batch: 24/50 Loss: 0.1734895557165146
Epoch: 22 Batch: 25/50 Loss: 0.1417628526687622
Epoch: 22 Batch: 26/50 Loss: 0.2187958061695099
Epoch: 22 Batch: 27/50 Loss: 0.23768803477287292
Epoch: 22 Batch: 28/50 Loss: 0.1994040608406067
Epoch: 22 Batch: 29/50 Loss: 0.4675081670284271
Epoch: 22 Batch: 30/50 Loss: 0.2077164500951767
Epoch: 22 Batch: 31/50 Loss: 0.25930559635162354
Epoch: 22 Batch: 32/50 Loss: 0.18371696770191193
Epoch: 22 Batch: 33/50 Loss: 0.16590112447738647
Epoch: 22 Batch: 34/50 Loss: 0.21249672770500183
Epoch: 22 Batch: 35/50 Loss: 0.16884787380695343
Epoch: 22 Batch: 36/50 Loss: 0.17027349770069122
Epoch: 22 Batch: 37/50 Loss: 0.12782840430736542
Epoch: 22 Batch: 38/50 Loss: 0.1956111192703247
Epoch: 22 Batch: 39/50 Loss: 0.22461943328380585
Epoch: 22 Batch: 40/50 Loss: 0.22096401453018188
Epoch: 22 Batch: 41/50 Loss: 0.1778503805398941
Epoch: 22 Batch: 42/50 Loss: 0.14420515298843384
Epoch: 22 Batch: 43/50 Loss: 0.13974183797836304
Epoch: 22 Batch: 44/50 Loss: 0.18510949611663818
Epoch: 22 Batch: 45/50 Loss: 0.19979770481586456
Epoch: 22 Batch: 46/50 Loss: 0.1764189451932907
Epoch: 22 Batch: 47/50 Loss: 0.26477596163749695
Epoch: 22 Batch: 48/50 Loss: 0.22048696875572205
Epoch: 22 Batch: 49/50 Loss: 0.1779939830303192
Epoch: 22 Batch: 50/50 Loss: 0.1997036337852478
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 4.607791802675995%. Word accuracy: 76.55%.
Character error rate not improved, best so far: 4.433996947449337%
Epoch: 23
Train NN
Epoch: 23 Batch: 1/50 Loss: 0.2411380410194397
Epoch: 23 Batch: 2/50 Loss: 0.1937919706106186
Epoch: 23 Batch: 3/50 Loss: 0.1499529927968979
Epoch: 23 Batch: 4/50 Loss: 0.14353962242603302
Epoch: 23 Batch: 5/50 Loss: 0.26577016711235046
Epoch: 23 Batch: 6/50 Loss: 0.17213621735572815
Epoch: 23 Batch: 7/50 Loss: 0.15328870713710785
Epoch: 23 Batch: 8/50 Loss: 0.19454020261764526
Epoch: 23 Batch: 9/50 Loss: 0.1712389588356018
Epoch: 23 Batch: 10/50 Loss: 0.15787287056446075
Epoch: 23 Batch: 11/50 Loss: 0.19935747981071472
Epoch: 23 Batch: 12/50 Loss: 0.20745541155338287
Epoch: 23 Batch: 13/50 Loss: 0.13571126759052277
Epoch: 23 Batch: 14/50 Loss: 0.1427735537290573
Epoch: 23 Batch: 15/50 Loss: 0.25372716784477234
Epoch: 23 Batch: 16/50 Loss: 0.14908309280872345
Epoch: 23 Batch: 17/50 Loss: 0.1663253903388977
Epoch: 23 Batch: 18/50 Loss: 0.1510983556509018
Epoch: 23 Batch: 19/50 Loss: 0.11774050444364548
Epoch: 23 Batch: 20/50 Loss: 0.21585072576999664
Epoch: 23 Batch: 21/50 Loss: 0.1106511577963829
Epoch: 23 Batch: 22/50 Loss: 0.19111621379852295
Epoch: 23 Batch: 23/50 Loss: 0.23575849831104279
Epoch: 23 Batch: 24/50 Loss: 0.39593929052352905
Epoch: 23 Batch: 25/50 Loss: 0.15544867515563965
Epoch: 23 Batch: 26/50 Loss: 0.15697646141052246
Epoch: 23 Batch: 27/50 Loss: 0.17452946305274963
Epoch: 23 Batch: 28/50 Loss: 0.23906660079956055
Epoch: 23 Batch: 29/50 Loss: 0.15657632052898407
Epoch: 23 Batch: 30/50 Loss: 0.22006554901599884
Epoch: 23 Batch: 31/50 Loss: 0.24795444309711456
Epoch: 23 Batch: 32/50 Loss: 0.21723252534866333
Epoch: 23 Batch: 33/50 Loss: 0.18145737051963806
Epoch: 23 Batch: 34/50 Loss: 0.25029489398002625
Epoch: 23 Batch: 35/50 Loss: 0.1769476979970932
Epoch: 23 Batch: 36/50 Loss: 0.1733773648738861
Epoch: 23 Batch: 37/50 Loss: 0.2394707053899765
Epoch: 23 Batch: 38/50 Loss: 0.18475842475891113
Epoch: 23 Batch: 39/50 Loss: 0.1926574409008026
Epoch: 23 Batch: 40/50 Loss: 0.17464926838874817
Epoch: 23 Batch: 41/50 Loss: 0.22260326147079468
Epoch: 23 Batch: 42/50 Loss: 0.1651650220155716
Epoch: 23 Batch: 43/50 Loss: 0.204610675573349
Epoch: 23 Batch: 44/50 Loss: 0.19217510521411896
Epoch: 23 Batch: 45/50 Loss: 0.2418399155139923
Epoch: 23 Batch: 46/50 Loss: 0.2013596147298813
Epoch: 23 Batch: 47/50 Loss: 0.2962210178375244
Epoch: 23 Batch: 48/50 Loss: 0.26823118329048157
Epoch: 23 Batch: 49/50 Loss: 0.20293951034545898
Epoch: 23 Batch: 50/50 Loss: 0.3218253552913666
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 4.759305266206927%. Word accuracy: 74.775%.
Character error rate not improved, best so far: 4.433996947449337%
Epoch: 24
Train NN
Epoch: 24 Batch: 1/50 Loss: 0.14878390729427338
Epoch: 24 Batch: 2/50 Loss: 0.16542376577854156
Epoch: 24 Batch: 3/50 Loss: 0.14585505425930023
Epoch: 24 Batch: 4/50 Loss: 0.19265449047088623
Epoch: 24 Batch: 5/50 Loss: 0.19932937622070312
Epoch: 24 Batch: 6/50 Loss: 0.19666722416877747
Epoch: 24 Batch: 7/50 Loss: 0.16996020078659058
Epoch: 24 Batch: 8/50 Loss: 0.26955336332321167
Epoch: 24 Batch: 9/50 Loss: 0.20770619809627533
Epoch: 24 Batch: 10/50 Loss: 0.2532878518104553
Epoch: 24 Batch: 11/50 Loss: 0.16501997411251068
Epoch: 24 Batch: 12/50 Loss: 0.2042030692100525
Epoch: 24 Batch: 13/50 Loss: 0.20303753018379211
Epoch: 24 Batch: 14/50 Loss: 0.30564066767692566
Epoch: 24 Batch: 15/50 Loss: 0.18215882778167725
Epoch: 24 Batch: 16/50 Loss: 0.28528299927711487
Epoch: 24 Batch: 17/50 Loss: 0.13320758938789368
Epoch: 24 Batch: 18/50 Loss: 0.19044196605682373
Epoch: 24 Batch: 19/50 Loss: 0.20638500154018402
Epoch: 24 Batch: 20/50 Loss: 0.2904544770717621
Epoch: 24 Batch: 21/50 Loss: 0.22632195055484772
Epoch: 24 Batch: 22/50 Loss: 0.21243079006671906
Epoch: 24 Batch: 23/50 Loss: 0.21568842232227325
Epoch: 24 Batch: 24/50 Loss: 0.2739044725894928
Epoch: 24 Batch: 25/50 Loss: 0.24534252285957336
Epoch: 24 Batch: 26/50 Loss: 0.16697341203689575
Epoch: 24 Batch: 27/50 Loss: 0.24481379985809326
Epoch: 24 Batch: 28/50 Loss: 0.248722106218338
Epoch: 24 Batch: 29/50 Loss: 0.18712513148784637
Epoch: 24 Batch: 30/50 Loss: 0.23313067853450775
Epoch: 24 Batch: 31/50 Loss: 0.2663334906101227
Epoch: 24 Batch: 32/50 Loss: 0.21770420670509338
Epoch: 24 Batch: 33/50 Loss: 0.179997518658638
Epoch: 24 Batch: 34/50 Loss: 0.19731773436069489
Epoch: 24 Batch: 35/50 Loss: 0.2943321466445923
Epoch: 24 Batch: 36/50 Loss: 0.20506469905376434
Epoch: 24 Batch: 37/50 Loss: 0.1919456273317337
Epoch: 24 Batch: 38/50 Loss: 0.14367957413196564
Epoch: 24 Batch: 39/50 Loss: 0.16058214008808136
Epoch: 24 Batch: 40/50 Loss: 0.32308316230773926
Epoch: 24 Batch: 41/50 Loss: 0.19770431518554688
Epoch: 24 Batch: 42/50 Loss: 0.19002017378807068
Epoch: 24 Batch: 43/50 Loss: 0.29165053367614746
Epoch: 24 Batch: 44/50 Loss: 0.2155028134584427
Epoch: 24 Batch: 45/50 Loss: 0.1536273956298828
Epoch: 24 Batch: 46/50 Loss: 0.2375653237104416
Epoch: 24 Batch: 47/50 Loss: 0.16051612794399261
Epoch: 24 Batch: 48/50 Loss: 0.18305401504039764
Epoch: 24 Batch: 49/50 Loss: 0.16854120790958405
Epoch: 24 Batch: 50/50 Loss: 0.18153811991214752
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 5.749713127081917%. Word accuracy: 70.19999999999999%.
Character error rate not improved, best so far: 4.433996947449337%
Epoch: 25
Train NN
Epoch: 25 Batch: 1/50 Loss: 0.1742667555809021
Epoch: 25 Batch: 2/50 Loss: 0.23276562988758087
Epoch: 25 Batch: 3/50 Loss: 0.1555560678243637
Epoch: 25 Batch: 4/50 Loss: 0.1907375156879425
Epoch: 25 Batch: 5/50 Loss: 0.1970178335905075
Epoch: 25 Batch: 6/50 Loss: 0.20461761951446533
Epoch: 25 Batch: 7/50 Loss: 0.1688222587108612
Epoch: 25 Batch: 8/50 Loss: 0.2159149944782257
Epoch: 25 Batch: 9/50 Loss: 0.19165107607841492
Epoch: 25 Batch: 10/50 Loss: 0.17587639391422272
Epoch: 25 Batch: 11/50 Loss: 0.24253104627132416
Epoch: 25 Batch: 12/50 Loss: 0.24101190268993378
Epoch: 25 Batch: 13/50 Loss: 0.18363964557647705
Epoch: 25 Batch: 14/50 Loss: 0.17877839505672455
Epoch: 25 Batch: 15/50 Loss: 0.19929203391075134
Epoch: 25 Batch: 16/50 Loss: 0.16217462718486786
Epoch: 25 Batch: 17/50 Loss: 0.21859212219715118
Epoch: 25 Batch: 18/50 Loss: 0.2737239897251129
Epoch: 25 Batch: 19/50 Loss: 0.22129997611045837
Epoch: 25 Batch: 20/50 Loss: 0.15266172587871552
Epoch: 25 Batch: 21/50 Loss: 0.29417020082473755
Epoch: 25 Batch: 22/50 Loss: 0.22638550400733948
Epoch: 25 Batch: 23/50 Loss: 0.21001514792442322
Epoch: 25 Batch: 24/50 Loss: 0.23133328557014465
Epoch: 25 Batch: 25/50 Loss: 0.2745514214038849
Epoch: 25 Batch: 26/50 Loss: 0.21322180330753326
Epoch: 25 Batch: 27/50 Loss: 0.18268857896327972
Epoch: 25 Batch: 28/50 Loss: 0.19321279227733612
Epoch: 25 Batch: 29/50 Loss: 0.19077026844024658
Epoch: 25 Batch: 30/50 Loss: 0.20857775211334229
Epoch: 25 Batch: 31/50 Loss: 0.3135610520839691
Epoch: 25 Batch: 32/50 Loss: 0.1940182000398636
Epoch: 25 Batch: 33/50 Loss: 0.2228972613811493
Epoch: 25 Batch: 34/50 Loss: 0.18511173129081726
Epoch: 25 Batch: 35/50 Loss: 0.21638929843902588
Epoch: 25 Batch: 36/50 Loss: 0.2449609786272049
Epoch: 25 Batch: 37/50 Loss: 0.18237976729869843
Epoch: 25 Batch: 38/50 Loss: 0.22109714150428772
Epoch: 25 Batch: 39/50 Loss: 0.16466699540615082
Epoch: 25 Batch: 40/50 Loss: 0.21127215027809143
Epoch: 25 Batch: 41/50 Loss: 0.2139977067708969
Epoch: 25 Batch: 42/50 Loss: 0.2365759015083313
Epoch: 25 Batch: 43/50 Loss: 0.20765243470668793
Epoch: 25 Batch: 44/50 Loss: 0.2396760731935501
Epoch: 25 Batch: 45/50 Loss: 0.21948140859603882
Epoch: 25 Batch: 46/50 Loss: 0.24839423596858978
Epoch: 25 Batch: 47/50 Loss: 0.25389227271080017
Epoch: 25 Batch: 48/50 Loss: 0.21766681969165802
Epoch: 25 Batch: 49/50 Loss: 0.24870643019676208
Epoch: 25 Batch: 50/50 Loss: 0.2895132005214691
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 4.848430832989829%. Word accuracy: 75.4875%.
Character error rate not improved, best so far: 4.433996947449337%
Epoch: 26
Train NN
Epoch: 26 Batch: 1/50 Loss: 0.4369007647037506
Epoch: 26 Batch: 2/50 Loss: 0.22486867010593414
Epoch: 26 Batch: 3/50 Loss: 0.2338741421699524
Epoch: 26 Batch: 4/50 Loss: 0.3490847647190094
Epoch: 26 Batch: 5/50 Loss: 0.22322174906730652
Epoch: 26 Batch: 6/50 Loss: 0.3196069598197937
Epoch: 26 Batch: 7/50 Loss: 0.22190751135349274
Epoch: 26 Batch: 8/50 Loss: 0.29828542470932007
Epoch: 26 Batch: 9/50 Loss: 0.3457237184047699
Epoch: 26 Batch: 10/50 Loss: 0.21389465034008026
Epoch: 26 Batch: 11/50 Loss: 0.20403359830379486
Epoch: 26 Batch: 12/50 Loss: 0.3070683777332306
Epoch: 26 Batch: 13/50 Loss: 0.32952743768692017
Epoch: 26 Batch: 14/50 Loss: 0.27778443694114685
Epoch: 26 Batch: 15/50 Loss: 0.21637532114982605
Epoch: 26 Batch: 16/50 Loss: 0.2663151025772095
Epoch: 26 Batch: 17/50 Loss: 0.2107381671667099
Epoch: 26 Batch: 18/50 Loss: 0.24087393283843994
Epoch: 26 Batch: 19/50 Loss: 0.2917748987674713
Epoch: 26 Batch: 20/50 Loss: 0.22883883118629456
Epoch: 26 Batch: 21/50 Loss: 0.2947409451007843
Epoch: 26 Batch: 22/50 Loss: 0.376802533864975
Epoch: 26 Batch: 23/50 Loss: 0.2519984841346741
Epoch: 26 Batch: 24/50 Loss: 0.2361040711402893
Epoch: 26 Batch: 25/50 Loss: 0.20215536653995514
Epoch: 26 Batch: 26/50 Loss: 0.2230493575334549
Epoch: 26 Batch: 27/50 Loss: 0.28452932834625244
Epoch: 26 Batch: 28/50 Loss: 0.20797353982925415
Epoch: 26 Batch: 29/50 Loss: 0.27145710587501526
Epoch: 26 Batch: 30/50 Loss: 0.18407483398914337
Epoch: 26 Batch: 31/50 Loss: 0.23567400872707367
Epoch: 26 Batch: 32/50 Loss: 0.21618695557117462
Epoch: 26 Batch: 33/50 Loss: 0.3431153893470764
Epoch: 26 Batch: 34/50 Loss: 0.20588049292564392
Epoch: 26 Batch: 35/50 Loss: 0.2309478521347046
Epoch: 26 Batch: 36/50 Loss: 0.18103712797164917
Epoch: 26 Batch: 37/50 Loss: 0.19608627259731293
Epoch: 26 Batch: 38/50 Loss: 0.1585572212934494
Epoch: 26 Batch: 39/50 Loss: 0.15766441822052002
Epoch: 26 Batch: 40/50 Loss: 0.15690475702285767
Epoch: 26 Batch: 41/50 Loss: 0.1841581165790558
Epoch: 26 Batch: 42/50 Loss: 0.2387189418077469
Epoch: 26 Batch: 43/50 Loss: 0.16545644402503967
Epoch: 26 Batch: 44/50 Loss: 0.21772713959217072
Epoch: 26 Batch: 45/50 Loss: 0.22990773618221283
Epoch: 26 Batch: 46/50 Loss: 0.2305065095424652
Epoch: 26 Batch: 47/50 Loss: 0.20316751301288605
Epoch: 26 Batch: 48/50 Loss: 0.19588878750801086
Epoch: 26 Batch: 49/50 Loss: 0.20944249629974365
Epoch: 26 Batch: 50/50 Loss: 0.2073628455400467
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 5.490134913826718%. Word accuracy: 71.9375%.
Character error rate not improved, best so far: 4.433996947449337%
No more improvement since 25 epochs. Training stopped.

Validation

In [71]:
# Reset graph
tf.compat.v1.reset_default_graph()

# Specify parameters
decoderType = DecoderType.BeamSearch
loader = DataLoader(batch_size, imgSize, maxTextLen, nEpoch=nEpoch)

# save characters of model for inference mode
open(FilePaths.fnCharList, 'w').write(str().join(loader.charList))

# save words contained in dataset into file
open(FilePaths.fnCorpus, 'w').write(str(' ').join(loader.trainWords + loader.validationWords))

# execute training or validation
model = Model(loader.charList, decoderType, mustRestore=True, corpus=word_corpus)
validate(model, loader)
/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).
  '`tf.layers.batch_normalization` is deprecated and '
/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.
  warnings.warn('`layer.apply` is deprecated and '
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.
/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.
  warnings.warn("`tf.nn.rnn_cell.LSTMCell` is deprecated and will be "
/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.
  warnings.warn('`layer.add_variable` is deprecated and '
Tensorflow: 2.4.0
Init with stored values from model/snapshot-1
INFO:tensorflow:Restoring parameters from model/snapshot-1
Validate NN
Batch: 1 / 16
Ground truth -> Recognized
Batch: 2 / 16
Ground truth -> Recognized
Batch: 3 / 16
Ground truth -> Recognized
Batch: 4 / 16
Ground truth -> Recognized
Batch: 5 / 16
Ground truth -> Recognized
Batch: 6 / 16
Ground truth -> Recognized
Batch: 7 / 16
Ground truth -> Recognized
Batch: 8 / 16
Ground truth -> Recognized
Batch: 9 / 16
Ground truth -> Recognized
Batch: 10 / 16
Ground truth -> Recognized
Batch: 11 / 16
Ground truth -> Recognized
Batch: 12 / 16
Ground truth -> Recognized
Batch: 13 / 16
Ground truth -> Recognized
Batch: 14 / 16
Ground truth -> Recognized
Batch: 15 / 16
Ground truth -> Recognized
Batch: 16 / 16
Ground truth -> Recognized
Character error rate: 4.433996947449337%. Word accuracy: 77.6875%.
Out[71]:
0.044339969474493375

Test on validation set

In [72]:
# Reset graph
tf.compat.v1.reset_default_graph()

# Specify parameters
decoderType = DecoderType.BeamSearch
loader = DataLoader(batch_size, imgSize, maxTextLen, nEpoch=nEpoch)

# save characters of model for inference mode
open(FilePaths.fnCharList, 'w').write(str().join(loader.charList))

# save words contained in dataset into file
open(FilePaths.fnCorpus, 'w').write(str(' ').join(loader.trainWords + loader.validationWords))

# execute test
model = Model(loader.charList, decoderType, mustRestore=True, corpus=word_corpus)
testtest(model, loader)
/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).
  '`tf.layers.batch_normalization` is deprecated and '
/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.
  warnings.warn('`layer.apply` is deprecated and '
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.
/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.
  warnings.warn("`tf.nn.rnn_cell.LSTMCell` is deprecated and will be "
/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.
  warnings.warn('`layer.add_variable` is deprecated and '
Tensorflow: 2.4.0
Init with stored values from model/snapshot-1
INFO:tensorflow:Restoring parameters from model/snapshot-1
Test NN
Batch: 1 / 8
Ground truth -> Recognized
[OK] "road" -> "road"
[OK] "splashes" -> "splashes"
[OK] "oscillations" -> "oscillations"
[OK] "header" -> "header"
[OK] "ranges" -> "ranges"
[ERR:1] "throttles" -> "throttle"
[OK] "caliber towers" -> "caliber towers"
[OK] "lever surfaces" -> "lever surfaces"
[OK] "freight" -> "freight"
[OK] "dispatch discharges" -> "dispatch discharges"
[ERR:2] "deposition limits" -> "deposition limbs"
[OK] "trails" -> "trails"
[OK] "grip cannon" -> "grip cannon"
[OK] "routine" -> "routine"
[OK] "deductions" -> "deductions"
[OK] "tickets" -> "tickets"
[OK] "presses cents" -> "presses cents"
[OK] "fats flicker" -> "fats flicker"
[OK] "teachings" -> "teachings"
[OK] "spears bullets" -> "spears bullets"
[OK] "deserter" -> "deserter"
[OK] "legging" -> "legging"
[OK] "arches" -> "arches"
[ERR:3] "justice rams" -> "justice can"
[OK] "chairmen" -> "chairmen"
[OK] "doorstep examinations" -> "doorstep examinations"
[OK] "fuses attachment" -> "fuses attachment"
[OK] "ram mine" -> "ram mine"
[OK] "press" -> "press"
[OK] "models" -> "models"
[OK] "dozens" -> "dozens"
[ERR:4] "investments" -> "investments gas"
[OK] "alias mirror" -> "alias mirror"
[OK] "windings roadside" -> "windings roadside"
[OK] "kettles calculation" -> "kettles calculation"
[OK] "task" -> "task"
[OK] "claws azimuths" -> "claws azimuths"
[ERR:4] "handful compass" -> "handful copy"
[OK] "tastes administrator" -> "tastes administrator"
[OK] "selections" -> "selections"
[OK] "hierarchies coats" -> "hierarchies coats"
[OK] "diver" -> "diver"
[OK] "apprehensions" -> "apprehensions"
[ERR:1] "destroyers" -> "destroyer"
[OK] "point" -> "point"
[OK] "barrier yaws" -> "barrier yaws"
[ERR:4] "slinging breakdown" -> "slinging bread"
[OK] "eligibility whirls" -> "eligibility whirls"
[OK] "dot flag" -> "dot flag"
[OK] "scratch stairs" -> "scratch stairs"
[OK] "descriptions compliance" -> "descriptions compliance"
[OK] "schedule streams" -> "schedule streams"
[OK] "promotion" -> "promotion"
[OK] "feeds scale" -> "feeds scale"
[ERR:4] "acceptances outlet" -> "acceptances auto"
[OK] "alternate violet" -> "alternate violet"
[OK] "developments" -> "developments"
[OK] "trim" -> "trim"
[ERR:1] "zone accident" -> "tone accident"
[OK] "tricks" -> "tricks"
[OK] "printouts" -> "printouts"
[OK] "civilians glows" -> "civilians glows"
[OK] "fighters" -> "fighters"
[OK] "punch" -> "punch"
[OK] "divider" -> "divider"
[OK] "captain" -> "captain"
[ERR:4] "subtask television" -> "subtask ecdevsion"
[OK] "hospital" -> "hospital"
[OK] "umbrellas chill" -> "umbrellas chill"
[OK] "desks" -> "desks"
[OK] "patterns" -> "patterns"
[OK] "milliliters ventilators" -> "milliliters ventilators"
[OK] "finger" -> "finger"
[ERR:3] "focus corrections" -> "boxes corrections"
[OK] "balloons" -> "balloons"
[ERR:4] "dab solders" -> "dab fold"
[OK] "chairperson" -> "chairperson"
[ERR:1] "chairperson" -> "chairpersons"
[OK] "worm" -> "worm"
[OK] "injuries libraries" -> "injuries libraries"
[OK] "opinions" -> "opinions"
[OK] "growths" -> "growths"
[OK] "argument noises" -> "argument noises"
[OK] "cabs" -> "cabs"
[OK] "thread" -> "thread"
[OK] "macro" -> "macro"
[OK] "aggravation" -> "aggravation"
[OK] "drainer combinations" -> "drainer combinations"
[ERR:6] "compass dynamometer" -> "commas dynamont"
[OK] "tray lens" -> "tray lens"
[OK] "jump shed" -> "jump shed"
[OK] "manufacturer faces" -> "manufacturer faces"
[OK] "leakage" -> "leakage"
[OK] "hair" -> "hair"
[OK] "award" -> "award"
[OK] "configuration" -> "configuration"
[OK] "drawers" -> "drawers"
[OK] "narcotics smile" -> "narcotics smile"
[OK] "recognitions skills" -> "recognitions skills"
[ERR:2] "relay bolts" -> "relay boils"
[OK] "crash" -> "crash"
[OK] "talkers debits" -> "talkers debits"
[OK] "couple inferences" -> "couple inferences"
[OK] "apostrophe" -> "apostrophe"
[ERR:4] "kiloliter" -> "filter"
[OK] "standard incomes" -> "standard incomes"
[ERR:4] "recordkeeping" -> "recordkepires"
[ERR:1] "submarines" -> "submarine"
[OK] "spares" -> "spares"
[OK] "ignitions" -> "ignitions"
[OK] "terminations ohms" -> "terminations ohms"
[OK] "acts consolidation" -> "acts consolidation"
[OK] "partitions" -> "partitions"
[OK] "feeders abbreviation" -> "feeders abbreviation"
[OK] "cough" -> "cough"
[OK] "reverse dust" -> "reverse dust"
[OK] "electricity diagrams" -> "electricity diagrams"
[OK] "grasses" -> "grasses"
[OK] "detail surge" -> "detail surge"
[OK] "islands revision" -> "islands revision"
[OK] "shields warnings" -> "shields warnings"
[OK] "hill leaving" -> "hill leaving"
[OK] "status cares" -> "status cares"
[OK] "aggravations stock" -> "aggravations stock"
[OK] "showers" -> "showers"
[OK] "motor" -> "motor"
[OK] "sleep" -> "sleep"
[OK] "activities bushing" -> "activities bushing"
[OK] "knobs" -> "knobs"
[OK] "slides" -> "slides"
[OK] "folds modes" -> "folds modes"
[OK] "records" -> "records"
[ERR:3] "blackboard february" -> "blackboard library"
[OK] "platters" -> "platters"
[OK] "interactions existence" -> "interactions existence"
[OK] "vapors" -> "vapors"
[ERR:1] "letter" -> "letters"
[OK] "couple" -> "couple"
[ERR:1] "spar subject" -> "spars subject"
[OK] "jacks" -> "jacks"
[OK] "claps" -> "claps"
[OK] "challenges behavior" -> "challenges behavior"
[OK] "zone" -> "zone"
[OK] "overlay asterisks" -> "overlay asterisks"
[OK] "fracture" -> "fracture"
[OK] "takeoff" -> "takeoff"
[OK] "chocks" -> "chocks"
[OK] "patterns" -> "patterns"
[OK] "lint" -> "lint"
[OK] "attorneys" -> "attorneys"
[OK] "trap" -> "trap"
[OK] "overvoltages mitts" -> "overvoltages mitts"
[OK] "interval lightning" -> "interval lightning"
[OK] "clothes ocean" -> "clothes ocean"
[OK] "skips" -> "skips"
[OK] "glance" -> "glance"
[OK] "question speech" -> "question speech"
[OK] "drainers" -> "drainers"
[OK] "selectors enclosure" -> "selectors enclosure"
[OK] "waters" -> "waters"
[ERR:2] "lakes" -> "axes"
[OK] "edge" -> "edge"
[OK] "minerals decrement" -> "minerals decrement"
[OK] "mentions wonder" -> "mentions wonder"
[OK] "originator morning" -> "originator morning"
[OK] "tourniquets" -> "tourniquets"
[ERR:5] "knowledge sundays" -> "knowledge juries"
[OK] "insignia" -> "insignia"
[OK] "dart" -> "dart"
[OK] "leaves colon" -> "leaves colon"
[OK] "purchaser" -> "purchaser"
[ERR:1] "knives milestones" -> "knives milestone"
[ERR:2] "visits canisters" -> "fists canisters"
[OK] "dispatchers hips" -> "dispatchers hips"
[OK] "friday" -> "friday"
[OK] "initiators" -> "initiators"
[OK] "set" -> "set"
[OK] "impulse" -> "impulse"
[OK] "motor benches" -> "motor benches"
[OK] "sheeting" -> "sheeting"
[OK] "fines cylinder" -> "fines cylinder"
[OK] "knee slate" -> "knee slate"
[OK] "overlay whirls" -> "overlay whirls"
[OK] "threes jars" -> "threes jars"
[ERR:1] "wind" -> "win"
[OK] "airship" -> "airship"
[OK] "hopes jars" -> "hopes jars"
[OK] "tactic drug" -> "tactic drug"
[OK] "hinge engineers" -> "hinge engineers"
[OK] "temper" -> "temper"
[OK] "vapor" -> "vapor"
[OK] "crowd" -> "crowd"
[OK] "layer" -> "layer"
[OK] "interface cash" -> "interface cash"
[OK] "descriptions" -> "descriptions"
[OK] "ringing groom" -> "ringing groom"
[OK] "controls" -> "controls"
[ERR:1] "hats" -> "bats"
[OK] "ends" -> "ends"
[OK] "jump" -> "jump"
[OK] "change" -> "change"
[OK] "veteran loss" -> "veteran loss"
[OK] "lumps" -> "lumps"
[OK] "nail" -> "nail"
[OK] "classification latch" -> "classification latch"
[OK] "traces" -> "traces"
[OK] "self courses" -> "self courses"
[OK] "patient" -> "patient"
[OK] "ladders bone" -> "ladders bone"
[OK] "land" -> "land"
[ERR:5] "professions forest" -> "professions brook"
[ERR:1] "weight senses" -> "weight sense"
[OK] "scenes" -> "scenes"
[OK] "slap" -> "slap"
[OK] "presumption mistakes" -> "presumption mistakes"
[OK] "period stopper" -> "period stopper"
[OK] "share" -> "share"
[OK] "strike junctions" -> "strike junctions"
[OK] "words gate" -> "words gate"
[OK] "destroyer launchers" -> "destroyer launchers"
[OK] "electrician" -> "electrician"
[OK] "batteries" -> "batteries"
[OK] "exhaust" -> "exhaust"
[OK] "allegations" -> "allegations"
[OK] "digits glance" -> "digits glance"
[OK] "markets" -> "markets"
[OK] "education" -> "education"
[OK] "tailor" -> "tailor"
[OK] "scores indication" -> "scores indication"
[ERR:1] "thermometers magneto" -> "thermometers magnet"
[OK] "district nurse" -> "district nurse"
[OK] "readings" -> "readings"
[OK] "wonders" -> "wonders"
[OK] "headings" -> "headings"
[OK] "rolls" -> "rolls"
[OK] "reliabilities" -> "reliabilities"
[OK] "calories" -> "calories"
[ERR:4] "tickets responsibility" -> "tickets responsbit"
[OK] "desk" -> "desk"
[ERR:4] "thimble population" -> "thimble duration"
[OK] "integers" -> "integers"
[ERR:2] "dawn" -> "dab"
[OK] "blood" -> "blood"
[OK] "dish" -> "dish"
[OK] "loop certifications" -> "loop certifications"
[OK] "jugs" -> "jugs"
[OK] "jigs heading" -> "jigs heading"
[OK] "administrations" -> "administrations"
[OK] "jails sweepers" -> "jails sweepers"
[OK] "ingredients investment" -> "ingredients investment"
[OK] "thunder" -> "thunder"
[OK] "trackers dot" -> "trackers dot"
[OK] "make" -> "make"
[OK] "stomach" -> "stomach"
[OK] "launchers dose" -> "launchers dose"
[OK] "rails" -> "rails"
[OK] "tour administration" -> "tour administration"
[OK] "trainers" -> "trainers"
[OK] "shoulder" -> "shoulder"
[OK] "presentations sea" -> "presentations sea"
[OK] "counsels cartridge" -> "counsels cartridge"
[ERR:1] "employees topic" -> "employee topic"
[ERR:1] "versions advancements" -> "versions advancement"
[OK] "cabinets parentheses" -> "cabinets parentheses"
[ERR:1] "agents cylinders" -> "agents cylinder"
[ERR:8] "occurrences monoliths" -> "occurrences locker"
[ERR:4] "discontinuance kilogram" -> "discontinuance gram"
[OK] "slinging" -> "slinging"
[OK] "investigations counts" -> "investigations counts"
[OK] "barometer" -> "barometer"
[OK] "west" -> "west"
[OK] "identification" -> "identification"
[ERR:1] "lights slap" -> "lights slaps"
[OK] "assault nods" -> "assault nods"
[OK] "prompts" -> "prompts"
[ERR:3] "sprayers zips" -> "sprayers crops"
[OK] "complaint wholesales" -> "complaint wholesales"
[OK] "radio" -> "radio"
[OK] "filter" -> "filter"
[ERR:9] "identification midwatch" -> "indication midators"
[OK] "stress" -> "stress"
[OK] "trouble" -> "trouble"
[ERR:8] "tabulation throttle" -> "baby action sthratoe"
[OK] "clericals" -> "clericals"
[ERR:3] "materials priorities" -> "materials parities"
[OK] "hunt radar" -> "hunt radar"
[OK] "plan operation" -> "plan operation"
[OK] "bulb" -> "bulb"
[OK] "firearm" -> "firearm"
[OK] "crimes" -> "crimes"
[OK] "infection" -> "infection"
[ERR:5] "medals midwatch" -> "medals idea"
[OK] "committees" -> "committees"
[OK] "thicknesses" -> "thicknesses"
[OK] "math" -> "math"
[OK] "suggestion recruit" -> "suggestion recruit"
[OK] "bullets chases" -> "bullets chases"
[OK] "radio" -> "radio"
[OK] "second kisses" -> "second kisses"
[OK] "cages" -> "cages"
[OK] "studies" -> "studies"
[OK] "choice berths" -> "choice berths"
[OK] "furs" -> "furs"
[OK] "computers" -> "computers"
[OK] "fences" -> "fences"
[OK] "fountain" -> "fountain"
[OK] "agent printouts" -> "agent printouts"
[OK] "capacitances" -> "capacitances"
[OK] "spikes" -> "spikes"
[OK] "warranties guests" -> "warranties guests"
[OK] "typists selectors" -> "typists selectors"
[OK] "titles traces" -> "titles traces"
[OK] "recapitulation accruement" -> "recapitulation accruement"
[OK] "tackles" -> "tackles"
[OK] "sun" -> "sun"
[OK] "ceremony schoolroom" -> "ceremony schoolroom"
[OK] "finish confinement" -> "finish confinement"
[OK] "justice" -> "justice"
[OK] "span" -> "span"
[OK] "orifice" -> "orifice"
[OK] "nation income" -> "nation income"
[OK] "alcoholics" -> "alcoholics"
[OK] "generals" -> "generals"
[OK] "calls" -> "calls"
[OK] "sediment oxide" -> "sediment oxide"
[OK] "sunday" -> "sunday"
[OK] "siren" -> "siren"
[OK] "here" -> "here"
[OK] "vendors" -> "vendors"
[OK] "excesses thirties" -> "excesses thirties"
[OK] "desks notice" -> "desks notice"
[OK] "duty quarterdeck" -> "duty quarterdeck"
[OK] "attacker warehouses" -> "attacker warehouses"
[OK] "perforators" -> "perforators"
[OK] "chain towels" -> "chain towels"
[OK] "legislation nod" -> "legislation nod"
[OK] "education" -> "education"
[OK] "cores" -> "cores"
[ERR:5] "establishment splint" -> "establishments air"
[ERR:2] "steam beds" -> "steam bet"
[OK] "walls" -> "walls"
[OK] "vector" -> "vector"
[OK] "liquor feelings" -> "liquor feelings"
[OK] "densities chambers" -> "densities chambers"
[OK] "lakes carpet" -> "lakes carpet"
[OK] "offices tips" -> "offices tips"
[OK] "staplers consolidation" -> "staplers consolidation"
[ERR:3] "leakages scratchpads" -> "leaves scratchpads"
[OK] "gear splash" -> "gear splash"
[OK] "diagnosis" -> "diagnosis"
[OK] "request probes" -> "request probes"
[OK] "wools coasts" -> "wools coasts"
[OK] "fares" -> "fares"
[OK] "retractors" -> "retractors"
[OK] "scratch" -> "scratch"
[OK] "rail" -> "rail"
[OK] "moments" -> "moments"
[OK] "detent complement" -> "detent complement"
[OK] "polices boom" -> "polices boom"
[OK] "glasses railways" -> "glasses railways"
[OK] "petitions" -> "petitions"
[OK] "boats" -> "boats"
[OK] "bullets" -> "bullets"
[OK] "cabinets gleams" -> "cabinets gleams"
[OK] "proportion locomotives" -> "proportion locomotives"
[OK] "specializations trace" -> "specializations trace"
[OK] "glossary tellers" -> "glossary tellers"
[OK] "gleams foods" -> "gleams foods"
[OK] "motion" -> "motion"
[OK] "documents picture" -> "documents picture"
[OK] "thursday" -> "thursday"
[OK] "seas" -> "seas"
[OK] "audit sand" -> "audit sand"
[OK] "balances" -> "balances"
[ERR:1] "paygrades" -> "paygrade"
[OK] "usages" -> "usages"
[OK] "student picks" -> "student picks"
[ERR:2] "worry directives" -> "word directives"
[OK] "organs lint" -> "organs lint"
[OK] "use basics" -> "use basics"
[OK] "alternates" -> "alternates"
[OK] "fifths abbreviations" -> "fifths abbreviations"
[OK] "roadside" -> "roadside"
[OK] "tractors locations" -> "tractors locations"
[OK] "lifetime collisions" -> "lifetime collisions"
[OK] "crystals" -> "crystals"
[ERR:2] "staplers" -> "staple"
[OK] "morals" -> "morals"
[OK] "duplicate raise" -> "duplicate raise"
[OK] "hull" -> "hull"
[OK] "sale" -> "sale"
[ERR:2] "guess" -> "glues"
[OK] "wait amplitudes" -> "wait amplitudes"
[ERR:1] "manifest" -> "manifests"
[OK] "tackles" -> "tackles"
[OK] "paneling" -> "paneling"
[OK] "fluids planes" -> "fluids planes"
[OK] "acceptances" -> "acceptances"
[OK] "fort battleship" -> "fort battleship"
[OK] "parallels films" -> "parallels films"
[OK] "voltage" -> "voltage"
[OK] "privilege" -> "privilege"
[ERR:2] "safety boost" -> "safety boat"
[OK] "painters reactor" -> "painters reactor"
[OK] "roof" -> "roof"
[OK] "cushions" -> "cushions"
[OK] "washtub" -> "washtub"
[OK] "refund" -> "refund"
[OK] "purchase" -> "purchase"
[OK] "cot" -> "cot"
[ERR:4] "safeguards realignments" -> "safeguards realigenr"
[OK] "soups supervisor" -> "soups supervisor"
[OK] "reenlistments formation" -> "reenlistments formation"
[OK] "coordinates veterans" -> "coordinates veterans"
[OK] "leg squeak" -> "leg squeak"
[ERR:2] "claw proficiencies" -> "car proficiencies"
[ERR:2] "deflectors nylons" -> "deflectors colons"
[OK] "benefit" -> "benefit"
[OK] "bet" -> "bet"
[OK] "juries sweeps" -> "juries sweeps"
[OK] "shoe capacitors" -> "shoe capacitors"
[OK] "societies snaps" -> "societies snaps"
[OK] "bushel" -> "bushel"
[OK] "prison rugs" -> "prison rugs"
[OK] "motion" -> "motion"
[ERR:2] "stove" -> "stones"
[OK] "floors stoppers" -> "floors stoppers"
[OK] "discussion runner" -> "discussion runner"
[ERR:1] "amusements" -> "amusement"
[OK] "figure" -> "figure"
[OK] "effect tricks" -> "effect tricks"
[OK] "offender" -> "offender"
[OK] "additive" -> "additive"
[OK] "watt stalls" -> "watt stalls"
[OK] "silk" -> "silk"
[OK] "subsystem mechanics" -> "subsystem mechanics"
[OK] "tourniquets conjectures" -> "tourniquets conjectures"
[OK] "preparations setup" -> "preparations setup"
[OK] "drawers drug" -> "drawers drug"
[ERR:5] "toothpicks hickory" -> "toothpicks hill"
[OK] "dishes" -> "dishes"
[OK] "raises ohm" -> "raises ohm"
[OK] "limbs sorts" -> "limbs sorts"
[ERR:1] "acquisitions" -> "acquisition"
[OK] "details" -> "details"
[OK] "chiefs cheaters" -> "chiefs cheaters"
[OK] "lakes" -> "lakes"
[OK] "man" -> "man"
[OK] "object" -> "object"
[OK] "admiral" -> "admiral"
[OK] "job" -> "job"
[OK] "nonavailabilities" -> "nonavailabilities"
[OK] "vent careers" -> "vent careers"
[OK] "gate" -> "gate"
[OK] "cave alcoholics" -> "cave alcoholics"
[OK] "waves dozens" -> "waves dozens"
[OK] "shields" -> "shields"
[OK] "clumps" -> "clumps"
[OK] "worm beams" -> "worm beams"
[ERR:3] "vibrations takeoff" -> "vibrations sakof"
[OK] "clips break" -> "clips break"
[OK] "net improvements" -> "net improvements"
[OK] "interests seconds" -> "interests seconds"
[OK] "paints steels" -> "paints steels"
[OK] "emergencies" -> "emergencies"
[OK] "recapitulations" -> "recapitulations"
[OK] "forks" -> "forks"
[ERR:7] "alignments appropriations" -> "alignment aprorias"
[OK] "alcoholics" -> "alcoholics"
[OK] "skill" -> "skill"
[OK] "chambers thing" -> "chambers thing"
[OK] "dye" -> "dye"
[OK] "schooling" -> "schooling"
[OK] "waves suspect" -> "waves suspect"
[OK] "packs" -> "packs"
[OK] "tuesdays river" -> "tuesdays river"
[OK] "things ores" -> "things ores"
[OK] "stator consequence" -> "stator consequence"
[OK] "warranty" -> "warranty"
[OK] "brain" -> "brain"
[OK] "needle exhibit" -> "needle exhibit"
[OK] "asterisk" -> "asterisk"
[OK] "piers" -> "piers"
[OK] "rescue" -> "rescue"
[OK] "cement" -> "cement"
[ERR:4] "terminator standard" -> "terminator stars"
[OK] "endeavors pump" -> "endeavors pump"
[OK] "whip" -> "whip"
[OK] "splicer" -> "splicer"
[OK] "backs" -> "backs"
[OK] "parts chip" -> "parts chip"
[OK] "story" -> "story"
[OK] "histories" -> "histories"
[OK] "swell" -> "swell"
[OK] "calendars" -> "calendars"
[OK] "chairmen hem" -> "chairmen hem"
[OK] "strokes chains" -> "strokes chains"
[OK] "house" -> "house"
[ERR:6] "entrapments categories" -> "entrapments cage"
[OK] "lids slaves" -> "lids slaves"
Batch: 2 / 8
Ground truth -> Recognized
[OK] "tenth boy" -> "tenth boy"
[OK] "dose" -> "dose"
[OK] "stretcher" -> "stretcher"
[OK] "agreements educators" -> "agreements educators"
[OK] "june" -> "june"
[OK] "cannons" -> "cannons"
[OK] "budgets rebounds" -> "budgets rebounds"
[OK] "boil" -> "boil"
[OK] "rope mechanic" -> "rope mechanic"
[ERR:3] "animals kits" -> "animals butt"
[OK] "buckets" -> "buckets"
[OK] "tan canal" -> "tan canal"
[OK] "gyro" -> "gyro"
[ERR:10] "addressees lanes" -> "depot ages"
[OK] "carelessness" -> "carelessness"
[OK] "violet poison" -> "violet poison"
[OK] "sip" -> "sip"
[OK] "growth lender" -> "growth lender"
[OK] "quota twenties" -> "quota twenties"
[OK] "bunches" -> "bunches"
[OK] "grove mattresses" -> "grove mattresses"
[OK] "props rust" -> "props rust"
[OK] "conspiracy stomachs" -> "conspiracy stomachs"
[OK] "designators" -> "designators"
[OK] "separation" -> "separation"
[OK] "appearances admiral" -> "appearances admiral"
[OK] "shortages" -> "shortages"
[OK] "encounters drift" -> "encounters drift"
[OK] "pistons" -> "pistons"
[ERR:4] "balls folders" -> "half holders"
[OK] "disciplines" -> "disciplines"
[OK] "instrumentation" -> "instrumentation"
[OK] "illustrations" -> "illustrations"
[OK] "tenth" -> "tenth"
[OK] "buses" -> "buses"
[OK] "carburetors splashes" -> "carburetors splashes"
[OK] "mosses combination" -> "mosses combination"
[OK] "struts" -> "struts"
[OK] "washing" -> "washing"
[OK] "rack acronyms" -> "rack acronyms"
[OK] "henrys navigators" -> "henrys navigators"
[OK] "recognitions" -> "recognitions"
[OK] "court cent" -> "court cent"
[ERR:6] "compresses attack" -> "compresses crops"
[OK] "drug" -> "drug"
[OK] "slaps access" -> "slaps access"
[OK] "candle finish" -> "candle finish"
[OK] "indicate" -> "indicate"
[OK] "june" -> "june"
[OK] "flare publications" -> "flare publications"
[OK] "steeples balance" -> "steeples balance"
[OK] "flanges dives" -> "flanges dives"
[ERR:3] "physics" -> "pay sips"
[OK] "gasoline" -> "gasoline"
[OK] "governor toolboxes" -> "governor toolboxes"
[OK] "sanitation" -> "sanitation"
[OK] "twine sides" -> "twine sides"
[ERR:3] "expenditure secretaries" -> "expenditure secteaties"
[OK] "tenth" -> "tenth"
[OK] "lees offices" -> "lees offices"
[OK] "kill" -> "kill"
[ERR:6] "modules fines" -> "modules"
[OK] "filler" -> "filler"
[OK] "miner" -> "miner"
[OK] "boots alignments" -> "boots alignments"
[OK] "guidelines" -> "guidelines"
[OK] "canals classification" -> "canals classification"
[OK] "feeder" -> "feeder"
[OK] "laundry" -> "laundry"
[OK] "cent" -> "cent"
[OK] "ditches comforts" -> "ditches comforts"
[OK] "costs delivery" -> "costs delivery"
[OK] "tracker arrivals" -> "tracker arrivals"
[OK] "calibration diagonals" -> "calibration diagonals"
[OK] "marines" -> "marines"
[OK] "cane compress" -> "cane compress"
[OK] "thumbs oars" -> "thumbs oars"
[ERR:4] "member" -> "meat"
[OK] "rams" -> "rams"
[ERR:2] "glass breads" -> "gas breads"
[OK] "chits" -> "chits"
[ERR:6] "airspeed responsibilities" -> "airspeed resnbilitity"
[OK] "leathers" -> "leathers"
[OK] "pint" -> "pint"
[OK] "utilities establishment" -> "utilities establishment"
[OK] "accord" -> "accord"
[OK] "brakes" -> "brakes"
[OK] "detention relay" -> "detention relay"
[OK] "comparison" -> "comparison"
[OK] "action" -> "action"
[ERR:2] "brain rank" -> "brain can"
[OK] "half surpluses" -> "half surpluses"
[OK] "pitches emergencies" -> "pitches emergencies"
[ERR:1] "shares accusation" -> "shares accusations"
[ERR:4] "table surprises" -> "table surprar"
[OK] "handfuls" -> "handfuls"
[OK] "threaders" -> "threaders"
[OK] "evacuation foreheads" -> "evacuation foreheads"
[OK] "misfit chair" -> "misfit chair"
[OK] "honor" -> "honor"
[OK] "seventies" -> "seventies"
[OK] "coordinate" -> "coordinate"
[OK] "tractor casualty" -> "tractor casualty"
[OK] "jaw rays" -> "jaw rays"
[OK] "pyramids" -> "pyramids"
[OK] "stretchers" -> "stretchers"
[OK] "odors" -> "odors"
[OK] "depth" -> "depth"
[OK] "props" -> "props"
[ERR:1] "crack" -> "cracks"
[OK] "nonavailability" -> "nonavailability"
[OK] "friction" -> "friction"
[OK] "compiler" -> "compiler"
[OK] "braid" -> "braid"
[OK] "cliffs date" -> "cliffs date"
[OK] "goal laugh" -> "goal laugh"
[OK] "thirties" -> "thirties"
[OK] "freedom" -> "freedom"
[OK] "sir phases" -> "sir phases"
[OK] "brush" -> "brush"
[OK] "addressee" -> "addressee"
[OK] "possessions" -> "possessions"
[OK] "messes" -> "messes"
[OK] "hospitals" -> "hospitals"
[OK] "sewage ride" -> "sewage ride"
[OK] "harpoon" -> "harpoon"
[ERR:5] "gaps splice" -> "gaps sons"
[ERR:5] "company knobs" -> "company bank"
[OK] "developments stem" -> "developments stem"
[OK] "addressees" -> "addressees"
[OK] "attraction" -> "attraction"
[ERR:7] "subfunctions oxygen" -> "subfunctions"
[OK] "ears" -> "ears"
[OK] "tackles" -> "tackles"
[OK] "mile" -> "mile"
[OK] "strands" -> "strands"
[OK] "lists swimmer" -> "lists swimmer"
[OK] "brains colons" -> "brains colons"
[OK] "track" -> "track"
[OK] "speeds street" -> "speeds street"
[OK] "coats brother" -> "coats brother"
[OK] "rollout" -> "rollout"
[OK] "beacons angles" -> "beacons angles"
[OK] "fathom" -> "fathom"
[OK] "base" -> "base"
[OK] "area beads" -> "area beads"
[OK] "surveys" -> "surveys"
[OK] "expenses stamps" -> "expenses stamps"
[OK] "goods interaction" -> "goods interaction"
[OK] "charts alternative" -> "charts alternative"
[OK] "forests" -> "forests"
[ERR:3] "traffic programmer" -> "traffic programs"
[OK] "summers" -> "summers"
[OK] "misalinements" -> "misalinements"
[ERR:9] "overloads altimeter" -> "overload darts"
[OK] "deserter" -> "deserter"
[OK] "batch" -> "batch"
[OK] "ivory" -> "ivory"
[OK] "regret fall" -> "regret fall"
[OK] "roar offer" -> "roar offer"
[OK] "ceiling contamination" -> "ceiling contamination"
[OK] "buses" -> "buses"
[OK] "tractor buttons" -> "tractor buttons"
[OK] "rim" -> "rim"
[OK] "tag" -> "tag"
[OK] "seam rejections" -> "seam rejections"
[OK] "suppressions" -> "suppressions"
[OK] "facilities rounds" -> "facilities rounds"
[OK] "beginner splitter" -> "beginner splitter"
[OK] "custom catches" -> "custom catches"
[ERR:1] "hundred lot" -> "hundred dot"
[ERR:6] "shoulder discussions" -> "shoulder disgust"
[OK] "resources provisions" -> "resources provisions"
[OK] "tills" -> "tills"
[ERR:4] "ammonia cuff" -> "ammonia arch"
[OK] "sill" -> "sill"
[OK] "fare manners" -> "fare manners"
[OK] "chairwoman" -> "chairwoman"
[OK] "lines" -> "lines"
[OK] "latches" -> "latches"
[OK] "pails sled" -> "pails sled"
[OK] "apparatus disk" -> "apparatus disk"
[ERR:2] "tent legging" -> "tent leaving"
[OK] "mattress" -> "mattress"
[OK] "weeds levers" -> "weeds levers"
[OK] "trash carbons" -> "trash carbons"
[OK] "calendars" -> "calendars"
[ERR:3] "arc particle" -> "air particles"
[OK] "formats updates" -> "formats updates"
[OK] "mother smashes" -> "mother smashes"
[OK] "ventilations" -> "ventilations"
[OK] "carbon" -> "carbon"
[OK] "odor endeavor" -> "odor endeavor"
[OK] "focus injuries" -> "focus injuries"
[OK] "drill" -> "drill"
[ERR:4] "nothing" -> "north"
[OK] "chalks ideas" -> "chalks ideas"
[OK] "decoders" -> "decoders"
[OK] "keys" -> "keys"
[OK] "buffer arches" -> "buffer arches"
[ERR:4] "splitter skies" -> "splicer sails"
[OK] "adherence breezes" -> "adherence breezes"
[OK] "clips" -> "clips"
[OK] "alcohols" -> "alcohols"
[OK] "discussions" -> "discussions"
[OK] "operators" -> "operators"
[OK] "rebound shades" -> "rebound shades"
[OK] "barometer" -> "barometer"
[OK] "qualification mounts" -> "qualification mounts"
[OK] "transistors captain" -> "transistors captain"
[OK] "rolls alloy" -> "rolls alloy"
[OK] "partitions" -> "partitions"
[OK] "vendors" -> "vendors"
[OK] "prisoner floor" -> "prisoner floor"
[OK] "supplies" -> "supplies"
[OK] "rap" -> "rap"
[OK] "ground meetings" -> "ground meetings"
[OK] "paints sequences" -> "paints sequences"
[ERR:2] "descriptions sewers" -> "descriptions levers"
[OK] "flake pads" -> "flake pads"
[OK] "texts" -> "texts"
[OK] "envelope residue" -> "envelope residue"
[OK] "drift" -> "drift"
[OK] "officer" -> "officer"
[OK] "resistances" -> "resistances"
[OK] "buzzer" -> "buzzer"
[OK] "interviewers hauls" -> "interviewers hauls"
[OK] "lick" -> "lick"
[OK] "investments" -> "investments"
[OK] "date temperatures" -> "date temperatures"
[OK] "plug exchangers" -> "plug exchangers"
[OK] "tear responsibilities" -> "tear responsibilities"
[OK] "authority" -> "authority"
[OK] "kits tar" -> "kits tar"
[OK] "cracks" -> "cracks"
[OK] "nails ride" -> "nails ride"
[OK] "armful" -> "armful"
[OK] "advancement" -> "advancement"
[OK] "rakes" -> "rakes"
[OK] "transmittal" -> "transmittal"
[OK] "runways dependencies" -> "runways dependencies"
[OK] "town" -> "town"
[OK] "pushup" -> "pushup"
[OK] "bears" -> "bears"
[OK] "temperatures" -> "temperatures"
[OK] "editor" -> "editor"
[ERR:3] "passage intelligences" -> "passage inlelgences"
[OK] "body checkout" -> "body checkout"
[OK] "cars" -> "cars"
[OK] "analyzer turns" -> "analyzer turns"
[ERR:2] "source need" -> "source bed"
[OK] "washtubs slings" -> "washtubs slings"
[OK] "craft" -> "craft"
[OK] "atmospheres" -> "atmospheres"
[ERR:4] "binoculars broadcasts" -> "binoculars breasts"
[ERR:2] "certificate minimum" -> "certificate maximum"
[OK] "raps" -> "raps"
[OK] "horn punishment" -> "horn punishment"
[OK] "sort" -> "sort"
[OK] "verb" -> "verb"
[OK] "advertisements partition" -> "advertisements partition"
[OK] "complaints" -> "complaints"
[OK] "armament" -> "armament"
[OK] "rockets advance" -> "rockets advance"
[OK] "ampere" -> "ampere"
[OK] "version guidelines" -> "version guidelines"
[OK] "groans inlets" -> "groans inlets"
[OK] "touches" -> "touches"
[OK] "waterline produce" -> "waterline produce"
[OK] "shoulders" -> "shoulders"
[OK] "mop" -> "mop"
[OK] "wonder" -> "wonder"
[OK] "concentrations" -> "concentrations"
[ERR:5] "profiles" -> "route"
[OK] "bulkhead" -> "bulkhead"
[OK] "cones" -> "cones"
[OK] "chests" -> "chests"
[OK] "sprays soldiers" -> "sprays soldiers"
[OK] "clouds interfaces" -> "clouds interfaces"
[ERR:1] "discontinuances" -> "discontinuance"
[ERR:1] "symptom locomotive" -> "symptom locomotives"
[OK] "pyramid" -> "pyramid"
[ERR:4] "transformer calibration" -> "transformer abrasion"
[OK] "plating retractors" -> "plating retractors"
[OK] "awards pupils" -> "awards pupils"
[OK] "trade crewmembers" -> "trade crewmembers"
[OK] "watch" -> "watch"
[OK] "loop" -> "loop"
[OK] "displays offenders" -> "displays offenders"
[ERR:3] "milestones" -> "milestcs"
[OK] "squares rinse" -> "squares rinse"
[OK] "insanities audits" -> "insanities audits"
[OK] "cell journals" -> "cell journals"
[OK] "tastes" -> "tastes"
[OK] "wills discriminations" -> "wills discriminations"
[OK] "governors morale" -> "governors morale"
[OK] "retractor" -> "retractor"
[OK] "swimmers swords" -> "swimmers swords"
[OK] "snaps eves" -> "snaps eves"
[OK] "adaptions" -> "adaptions"
[OK] "divisions" -> "divisions"
[OK] "snow accomplishment" -> "snow accomplishment"
[OK] "carbon" -> "carbon"
[OK] "claps cards" -> "claps cards"
[ERR:1] "submarines lifeboats" -> "submarines lifeboat"
[OK] "towels" -> "towels"
[OK] "keywords" -> "keywords"
[OK] "swimmer towel" -> "swimmer towel"
[OK] "couples stones" -> "couples stones"
[OK] "reports" -> "reports"
[OK] "situation tape" -> "situation tape"
[OK] "daybreak misfits" -> "daybreak misfits"
[OK] "jugs" -> "jugs"
[OK] "physics" -> "physics"
[OK] "daughter" -> "daughter"
[ERR:6] "fleets echelons" -> "fleets chief"
[OK] "conflict" -> "conflict"
[OK] "strikes" -> "strikes"
[OK] "careers" -> "careers"
[OK] "jumpers adjective" -> "jumpers adjective"
[ERR:5] "aptitudes sewage" -> "aptitudes kettles"
[OK] "wagon" -> "wagon"
[ERR:2] "weld fields" -> "belt fields"
[OK] "record" -> "record"
[OK] "signalmen ally" -> "signalmen ally"
[OK] "pastes" -> "pastes"
[OK] "season hubs" -> "season hubs"
[OK] "expenditure" -> "expenditure"
[OK] "adjectives" -> "adjectives"
[OK] "arrays" -> "arrays"
[OK] "tenth eddies" -> "tenth eddies"
[OK] "guidelines contrast" -> "guidelines contrast"
[OK] "eleven roller" -> "eleven roller"
[OK] "apron" -> "apron"
[OK] "operation colleges" -> "operation colleges"
[OK] "captures pressures" -> "captures pressures"
[OK] "suspect" -> "suspect"
[ERR:2] "blocks molecules" -> "backs molecules"
[OK] "starboard railroad" -> "starboard railroad"
[OK] "docks" -> "docks"
[OK] "sirs" -> "sirs"
[OK] "path" -> "path"
[OK] "cage drums" -> "cage drums"
[OK] "accountabilities piles" -> "accountabilities piles"
[OK] "battery mule" -> "battery mule"
[ERR:2] "transistors processors" -> "transistors processes"
[OK] "doubt" -> "doubt"
[OK] "island interpreters" -> "island interpreters"
[ERR:5] "position variation" -> "portion ration"
[OK] "twists extension" -> "twists extension"
[OK] "image numerals" -> "image numerals"
[OK] "gates asterisks" -> "gates asterisks"
[ERR:2] "signal" -> "sign"
[OK] "buffer" -> "buffer"
[ERR:3] "batteries dynamics" -> "batteries dynaien"
[OK] "deviation" -> "deviation"
[OK] "sir servant" -> "sir servant"
[OK] "admissions curl" -> "admissions curl"
[OK] "worm hardship" -> "worm hardship"
[ERR:3] "supervision lettering" -> "supervision lterins"
[OK] "eliminator inlet" -> "eliminator inlet"
[OK] "conjunction" -> "conjunction"
[OK] "endeavors" -> "endeavors"
[OK] "squadron" -> "squadron"
[OK] "lenders breads" -> "lenders breads"
[OK] "activities schoolhouses" -> "activities schoolhouses"
[OK] "advance felt" -> "advance felt"
[OK] "waterlines" -> "waterlines"
[OK] "clips" -> "clips"
[OK] "inceptions" -> "inceptions"
[OK] "supplies" -> "supplies"
[OK] "statements" -> "statements"
[OK] "closure parks" -> "closure parks"
[OK] "liquors" -> "liquors"
[OK] "deductions influence" -> "deductions influence"
[OK] "agents" -> "agents"
[OK] "boost" -> "boost"
[OK] "passbooks" -> "passbooks"
[OK] "hooks missiles" -> "hooks missiles"
[OK] "clearances" -> "clearances"
[OK] "discrepancies locomotives" -> "discrepancies locomotives"
[ERR:4] "hotels scores" -> "hotels forests"
[OK] "dock container" -> "dock container"
[ERR:4] "visibilities heaps" -> "vicinities heaps"
[OK] "sequences" -> "sequences"
[OK] "canals" -> "canals"
[OK] "try survivals" -> "try survivals"
[ERR:1] "gyros mornings" -> "gyros morning"
[ERR:4] "concentrations outfit" -> "concentrations routes"
[OK] "heads adhesives" -> "heads adhesives"
[OK] "mentions" -> "mentions"
[OK] "circumferences" -> "circumferences"
[OK] "escapes techniques" -> "escapes techniques"
[OK] "interchanges cracks" -> "interchanges cracks"
[OK] "islands vice" -> "islands vice"
[ERR:3] "symptom classes" -> "symptom case"
[OK] "monitors" -> "monitors"
[OK] "warranties" -> "warranties"
[OK] "calibers" -> "calibers"
[OK] "night" -> "night"
[OK] "probabilities" -> "probabilities"
[OK] "appraisals" -> "appraisals"
[OK] "dive" -> "dive"
[OK] "bypass" -> "bypass"
[OK] "street" -> "street"
[OK] "hauls manager" -> "hauls manager"
[OK] "pull specialty" -> "pull specialty"
[OK] "sacks nut" -> "sacks nut"
[OK] "bushel" -> "bushel"
[OK] "scheduler" -> "scheduler"
[OK] "executions educators" -> "executions educators"
[OK] "thursday" -> "thursday"
[OK] "menu" -> "menu"
[OK] "frigate fogs" -> "frigate fogs"
[OK] "recording" -> "recording"
[OK] "bricks wheel" -> "bricks wheel"
[OK] "reproduction pair" -> "reproduction pair"
[OK] "roll" -> "roll"
[OK] "fields" -> "fields"
[OK] "thimbles bowls" -> "thimbles bowls"
[OK] "story" -> "story"
[OK] "responsibilities" -> "responsibilities"
[OK] "transformer bones" -> "transformer bones"
[OK] "relay" -> "relay"
[OK] "swallows" -> "swallows"
[OK] "stream" -> "stream"
[OK] "polishes" -> "polishes"
[OK] "roots electrons" -> "roots electrons"
[OK] "hut" -> "hut"
[OK] "insulation" -> "insulation"
[OK] "rug till" -> "rug till"
[OK] "rod" -> "rod"
[ERR:1] "semiconductor soles" -> "semiconductors soles"
[OK] "chalks battles" -> "chalks battles"
[OK] "formation tablets" -> "formation tablets"
[OK] "nickel executions" -> "nickel executions"
[ERR:7] "itineraries couple" -> "itineraries"
[OK] "basis" -> "basis"
[OK] "headquarters integer" -> "headquarters integer"
[OK] "hit tens" -> "hit tens"
[OK] "ratios shipment" -> "ratios shipment"
[OK] "columns affair" -> "columns affair"
[OK] "filters" -> "filters"
[OK] "reductions" -> "reductions"
[OK] "autos" -> "autos"
[OK] "casts" -> "casts"
[OK] "oar" -> "oar"
[ERR:3] "affiant carelessness" -> "affiant caresness"
[OK] "rockets" -> "rockets"
[OK] "tills slave" -> "tills slave"
[OK] "knots" -> "knots"
[OK] "locks" -> "locks"
[OK] "symptoms lifetime" -> "symptoms lifetime"
[OK] "organizations" -> "organizations"
[OK] "makes surveyors" -> "makes surveyors"
[OK] "chills" -> "chills"
[OK] "discrepancies" -> "discrepancies"
[OK] "metals" -> "metals"
[OK] "allocation spacers" -> "allocation spacers"
[OK] "failures" -> "failures"
[OK] "case formulas" -> "case formulas"
[OK] "destinations suits" -> "destinations suits"
[OK] "uncertainty election" -> "uncertainty election"
[OK] "speech errors" -> "speech errors"
[OK] "thought" -> "thought"
[ERR:4] "troubleshooter sword" -> "troubleshooters war"
[OK] "cars" -> "cars"
[OK] "variety" -> "variety"
[OK] "primitives realinements" -> "primitives realinements"
[OK] "screwdriver" -> "screwdriver"
[OK] "depots" -> "depots"
[OK] "frigates misleads" -> "frigates misleads"
[OK] "porters" -> "porters"
[OK] "wingnut" -> "wingnut"
[OK] "fake sidewalk" -> "fake sidewalk"
[OK] "nomenclatures" -> "nomenclatures"
[OK] "voices" -> "voices"
[OK] "tool conspiracies" -> "tool conspiracies"
[OK] "calculators journey" -> "calculators journey"
[OK] "difficulty impedance" -> "difficulty impedance"
[OK] "secretaries" -> "secretaries"
[OK] "hardness" -> "hardness"
[OK] "fuels" -> "fuels"
[ERR:2] "bytes honk" -> "bytes cork"
[ERR:1] "farm stream" -> "farms stream"
[ERR:1] "certification" -> "certifications"
[OK] "recruiter" -> "recruiter"
[OK] "daughter" -> "daughter"
[OK] "tons" -> "tons"
[OK] "rack helicopters" -> "rack helicopters"
[OK] "dam" -> "dam"
[OK] "alarm bunk" -> "alarm bunk"
[OK] "departments" -> "departments"
[OK] "helmet berries" -> "helmet berries"
[ERR:3] "rating" -> "being"
[OK] "possessions satellite" -> "possessions satellite"
[OK] "adherences" -> "adherences"
[OK] "cushions" -> "cushions"
[ERR:1] "course presentation" -> "courses presentation"
[OK] "sponge desertions" -> "sponge desertions"
Batch: 3 / 8
Ground truth -> Recognized
[OK] "crowd alcohols" -> "crowd alcohols"
[ERR:2] "sticks spoon" -> "sticks spot"
[OK] "correspondence" -> "correspondence"
[OK] "carbons" -> "carbons"
[OK] "vapors spray" -> "vapors spray"
[OK] "grease" -> "grease"
[OK] "assistant rowboats" -> "assistant rowboats"
[OK] "collars" -> "collars"
[OK] "cements" -> "cements"
[OK] "pile" -> "pile"
[OK] "modules antennas" -> "modules antennas"
[OK] "infections ball" -> "infections ball"
[OK] "requisition address" -> "requisition address"
[OK] "chief access" -> "chief access"
[OK] "components" -> "components"
[OK] "blowers cape" -> "blowers cape"
[OK] "passivations spans" -> "passivations spans"
[OK] "scale mixes" -> "scale mixes"
[OK] "authorization" -> "authorization"
[OK] "deductions facilitation" -> "deductions facilitation"
[OK] "conjunction beings" -> "conjunction beings"
[OK] "bombs" -> "bombs"
[OK] "volt" -> "volt"
[OK] "clubs spokes" -> "clubs spokes"
[OK] "cuffs" -> "cuffs"
[OK] "press flake" -> "press flake"
[OK] "decrements" -> "decrements"
[OK] "visions" -> "visions"
[OK] "yolk" -> "yolk"
[OK] "governors" -> "governors"
[OK] "warnings bell" -> "warnings bell"
[ERR:1] "credibility runaways" -> "credibility runways"
[OK] "distributors" -> "distributors"
[OK] "aim jeopardy" -> "aim jeopardy"
[OK] "discretion" -> "discretion"
[OK] "mill passengers" -> "mill passengers"
[OK] "densities" -> "densities"
[ERR:1] "wonders" -> "wonder"
[OK] "puffs" -> "puffs"
[OK] "curtain chests" -> "curtain chests"
[OK] "powers coal" -> "powers coal"
[ERR:4] "sonars" -> "conn"
[OK] "suits salt" -> "suits salt"
[OK] "share" -> "share"
[ERR:1] "straighteners" -> "straightener"
[OK] "brackets" -> "brackets"
[ERR:4] "arguments plots" -> "arguments males"
[OK] "tactic" -> "tactic"
[OK] "principals" -> "principals"
[OK] "bottoms preparation" -> "bottoms preparation"
[OK] "gunfire replacements" -> "gunfire replacements"
[OK] "counter" -> "counter"
[OK] "thing languages" -> "thing languages"
[OK] "lakes transport" -> "lakes transport"
[OK] "gaskets sevenths" -> "gaskets sevenths"
[ERR:1] "moisture requirements" -> "moisture requirement"
[OK] "stabilization" -> "stabilization"
[OK] "guard" -> "guard"
[OK] "cheek" -> "cheek"
[OK] "inquiry" -> "inquiry"
[OK] "purge twirl" -> "purge twirl"
[ERR:1] "ores stoppers" -> "cores stoppers"
[OK] "delivery" -> "delivery"
[OK] "duplicate" -> "duplicate"
[OK] "desks doorstep" -> "desks doorstep"
[ERR:4] "rubbish diagnostics" -> "cubes diagnostics"
[OK] "wings" -> "wings"
[OK] "curvature reaction" -> "curvature reaction"
[OK] "longitude" -> "longitude"
[OK] "contrasts songs" -> "contrasts songs"
[OK] "asterisks column" -> "asterisks column"
[OK] "tenth" -> "tenth"
[OK] "indicator cliff" -> "indicator cliff"
[OK] "patter" -> "patter"
[OK] "diodes" -> "diodes"
[OK] "account" -> "account"
[OK] "families semaphore" -> "families semaphore"
[OK] "builders" -> "builders"
[OK] "update wear" -> "update wear"
[OK] "cabs" -> "cabs"
[OK] "presents" -> "presents"
[OK] "shaft" -> "shaft"
[OK] "thickness" -> "thickness"
[OK] "volumes" -> "volumes"
[OK] "registers" -> "registers"
[OK] "sectors" -> "sectors"
[OK] "condensers trip" -> "condensers trip"
[ERR:4] "drags usages" -> "drags arcs"
[OK] "messenger coordinations" -> "messenger coordinations"
[ERR:7] "managers source" -> "dangers setups"
[OK] "bags target" -> "bags target"
[OK] "means corks" -> "means corks"
[OK] "spars image" -> "spars image"
[OK] "habit concepts" -> "habit concepts"
[ERR:1] "helicopters pools" -> "helicopters pool"
[ERR:6] "calendars arrangement" -> "calendars orange"
[OK] "hotel" -> "hotel"
[OK] "cement stick" -> "cement stick"
[OK] "focus" -> "focus"
[OK] "extension" -> "extension"
[ERR:2] "link tilling" -> "bin tilling"
[OK] "carloads" -> "carloads"
[OK] "installations eliminator" -> "installations eliminator"
[OK] "abusers" -> "abusers"
[OK] "alphabets tails" -> "alphabets tails"
[OK] "numerals" -> "numerals"
[OK] "annex ingredient" -> "annex ingredient"
[OK] "lead" -> "lead"
[OK] "replacement" -> "replacement"
[OK] "clamp compromise" -> "clamp compromise"
[OK] "trousers" -> "trousers"
[OK] "calibers" -> "calibers"
[OK] "propeller" -> "propeller"
[OK] "orifices chases" -> "orifices chases"
[OK] "tolerances privates" -> "tolerances privates"
[OK] "tracks fixture" -> "tracks fixture"
[OK] "displays" -> "displays"
[OK] "stripe" -> "stripe"
[OK] "exceptions" -> "exceptions"
[OK] "misfits" -> "misfits"
[ERR:3] "nomenclature metal" -> "nomenclature meters"
[ERR:3] "elapse sleds" -> "elapses beds"
[OK] "shoulder" -> "shoulder"
[OK] "tissues" -> "tissues"
[OK] "stations" -> "stations"
[ERR:1] "requisitions moss" -> "requisitions mass"
[OK] "bunks" -> "bunks"
[OK] "hotels" -> "hotels"
[ERR:1] "origins dope" -> "origins dopes"
[OK] "grooms" -> "grooms"
[OK] "outlet coin" -> "outlet coin"
[OK] "monday" -> "monday"
[OK] "keyboards publications" -> "keyboards publications"
[OK] "drainer song" -> "drainer song"
[OK] "routine" -> "routine"
[OK] "uniforms filler" -> "uniforms filler"
[OK] "lime cliff" -> "lime cliff"
[OK] "dockings" -> "dockings"
[OK] "presentations" -> "presentations"
[OK] "polarities" -> "polarities"
[OK] "beings recombinations" -> "beings recombinations"
[OK] "loaves twirl" -> "loaves twirl"
[OK] "rates" -> "rates"
[OK] "chapters" -> "chapters"
[OK] "vomit responses" -> "vomit responses"
[OK] "feelings" -> "feelings"
[ERR:1] "turnarounds" -> "turnaround"
[OK] "hunt paygrades" -> "hunt paygrades"
[OK] "subject thicknesses" -> "subject thicknesses"
[OK] "purchases" -> "purchases"
[OK] "counsels bytes" -> "counsels bytes"
[OK] "traffic output" -> "traffic output"
[OK] "boat" -> "boat"
[OK] "quality patter" -> "quality patter"
[OK] "capital" -> "capital"
[OK] "units" -> "units"
[ERR:5] "branches curve" -> "branches beams"
[OK] "paste" -> "paste"
[OK] "stare" -> "stare"
[ERR:3] "spools dish" -> "spools date"
[OK] "roof" -> "roof"
[OK] "tan traffic" -> "tan traffic"
[ERR:14] "synthetics ticket" -> "try sfhoskor"
[OK] "assistants" -> "assistants"
[OK] "weights settlement" -> "weights settlement"
[OK] "core" -> "core"
[OK] "dab" -> "dab"
[OK] "subjects" -> "subjects"
[OK] "freight" -> "freight"
[OK] "grooves workmen" -> "grooves workmen"
[OK] "voucher" -> "voucher"
[OK] "gate loudspeaker" -> "gate loudspeaker"
[OK] "density shirts" -> "density shirts"
[OK] "cubes jar" -> "cubes jar"
[OK] "hilltops" -> "hilltops"
[OK] "precaution" -> "precaution"
[OK] "limitations valves" -> "limitations valves"
[OK] "disasters" -> "disasters"
[OK] "heats" -> "heats"
[OK] "rewards hashmarks" -> "rewards hashmarks"
[OK] "theories deposition" -> "theories deposition"
[ERR:6] "supervisors representatives" -> "supervisors resenatios"
[OK] "fact protection" -> "fact protection"
[OK] "documentation" -> "documentation"
[OK] "fillers cycles" -> "fillers cycles"
[OK] "heats cure" -> "heats cure"
[OK] "thoughts" -> "thoughts"
[OK] "pound" -> "pound"
[ERR:3] "communities" -> "communting"
[ERR:1] "jars ranks" -> "bars ranks"
[OK] "gyroscopes gyros" -> "gyroscopes gyros"
[OK] "lens" -> "lens"
[OK] "options" -> "options"
[OK] "harnesses" -> "harnesses"
[OK] "jacket" -> "jacket"
[ERR:9] "amplifiers specialist" -> "omliers cpocilits"
[OK] "hickories bowls" -> "hickories bowls"
[OK] "lumps cake" -> "lumps cake"
[OK] "injector" -> "injector"
[OK] "crewmembers" -> "crewmembers"
[OK] "analogs complaint" -> "analogs complaint"
[OK] "school equipment" -> "school equipment"
[OK] "events" -> "events"
[OK] "meet" -> "meet"
[OK] "lender night" -> "lender night"
[OK] "chits core" -> "chits core"
[OK] "removals print" -> "removals print"
[OK] "mouth cruise" -> "mouth cruise"
[OK] "focus" -> "focus"
[OK] "keyword homes" -> "keyword homes"
[OK] "leak document" -> "leak document"
[OK] "bank bubbles" -> "bank bubbles"
[OK] "chit jeopardies" -> "chit jeopardies"
[OK] "algebra satellites" -> "algebra satellites"
[OK] "stress" -> "stress"
[OK] "coordinates televisions" -> "coordinates televisions"
[OK] "evaluation" -> "evaluation"
[ERR:9] "restaurant giants" -> "rtspats hints"
[OK] "torque" -> "torque"
[OK] "correspondence" -> "correspondence"
[OK] "crusts mercury" -> "crusts mercury"
[OK] "text" -> "text"
[OK] "application flash" -> "application flash"
[OK] "centerline" -> "centerline"
[OK] "comments" -> "comments"
[OK] "actions sites" -> "actions sites"
[OK] "candle" -> "candle"
[OK] "dates relationship" -> "dates relationship"
[OK] "car" -> "car"
[OK] "college" -> "college"
[OK] "whirl" -> "whirl"
[ERR:2] "mops rehabilitation" -> "hoops rehabilitation"
[OK] "bin deposits" -> "bin deposits"
[ERR:1] "tubes cruises" -> "tubes cruise"
[OK] "desert passes" -> "desert passes"
[OK] "legend camera" -> "legend camera"
[OK] "streaks" -> "streaks"
[OK] "polisher" -> "polisher"
[ERR:2] "subordinate skill" -> "subordinatesill"
[OK] "decisions display" -> "decisions display"
[OK] "discount introduction" -> "discount introduction"
[OK] "nights" -> "nights"
[OK] "settings" -> "settings"
[OK] "interference" -> "interference"
[OK] "magnesium modules" -> "magnesium modules"
[OK] "housings" -> "housings"
[OK] "tabulation" -> "tabulation"
[OK] "meridian" -> "meridian"
[OK] "vol." -> "vol."
[OK] "custom" -> "custom"
[OK] "holddown" -> "holddown"
[OK] "giant isolation" -> "giant isolation"
[OK] "breaks" -> "breaks"
[OK] "control" -> "control"
[OK] "ejection" -> "ejection"
[OK] "flash" -> "flash"
[OK] "greenwich frosts" -> "greenwich frosts"
[ERR:4] "union automobile" -> "union automoes"
[OK] "negligence contribution" -> "negligence contribution"
[ERR:3] "washes" -> "wuschs"
[ERR:6] "adjective" -> "phipectin"
[ERR:4] "organizations exchange" -> "organizations sechae"
[OK] "fines" -> "fines"
[OK] "property" -> "property"
[OK] "sprayers toolboxes" -> "sprayers toolboxes"
[OK] "transmitters" -> "transmitters"
[OK] "friction raises" -> "friction raises"
[OK] "apprehension jets" -> "apprehension jets"
[OK] "sonars picks" -> "sonars picks"
[OK] "confession forecast" -> "confession forecast"
[OK] "separation" -> "separation"
[OK] "pot" -> "pot"
[OK] "wonder detention" -> "wonder detention"
[OK] "encounter" -> "encounter"
[OK] "caution" -> "caution"
[OK] "swallows advisers" -> "swallows advisers"
[OK] "span steam" -> "span steam"
[ERR:5] "demonstration rattle" -> "demonstrations trails"
[OK] "railroads observation" -> "railroads observation"
[ERR:1] "harmony exits" -> "harmony exit"
[OK] "sexes" -> "sexes"
[ERR:3] "mast veteran" -> "mast meter"
[ERR:5] "documentation dyes" -> "documentation"
[OK] "taste" -> "taste"
[OK] "architecture" -> "architecture"
[OK] "bed" -> "bed"
[OK] "hunt" -> "hunt"
[OK] "densities back" -> "densities back"
[ERR:5] "nameplate amount" -> "nameplate acre"
[OK] "instrumentation feelings" -> "instrumentation feelings"
[OK] "reading origin" -> "reading origin"
[OK] "macro" -> "macro"
[OK] "workbook" -> "workbook"
[OK] "oxide components" -> "oxide components"
[OK] "breaths" -> "breaths"
[ERR:1] "clicks" -> "click"
[OK] "fetch" -> "fetch"
[OK] "buildings" -> "buildings"
[OK] "dump" -> "dump"
[OK] "bread" -> "bread"
[OK] "sense blades" -> "sense blades"
[OK] "headers" -> "headers"
[ERR:2] "watt" -> "bat"
[OK] "affair" -> "affair"
[OK] "permission sockets" -> "permission sockets"
[OK] "agreement custody" -> "agreement custody"
[OK] "dependencies safety" -> "dependencies safety"
[OK] "compromises" -> "compromises"
[OK] "horsepower" -> "horsepower"
[OK] "choice presentations" -> "choice presentations"
[OK] "means" -> "means"
[OK] "variables" -> "variables"
[ERR:1] "attesting triggers" -> "attesting trigger"
[OK] "receivers" -> "receivers"
[OK] "triggers department" -> "triggers department"
[OK] "wafers" -> "wafers"
[OK] "sisters" -> "sisters"
[OK] "barge dash" -> "barge dash"
[OK] "swords" -> "swords"
[OK] "lime timer" -> "lime timer"
[ERR:1] "grooves" -> "groves"
[OK] "ticket tablet" -> "ticket tablet"
[ERR:6] "setup reliabilities" -> "setup credibility"
[OK] "analog" -> "analog"
[OK] "legends" -> "legends"
[OK] "baskets story" -> "baskets story"
[OK] "alerts chase" -> "alerts chase"
[OK] "retailer" -> "retailer"
[OK] "mask" -> "mask"
[OK] "stamp" -> "stamp"
[OK] "bigamies decibel" -> "bigamies decibel"
[OK] "equipment resistor" -> "equipment resistor"
[OK] "staplers passbooks" -> "staplers passbooks"
[OK] "manifests" -> "manifests"
[OK] "stairs houses" -> "stairs houses"
[OK] "future" -> "future"
[ERR:5] "visit dedications" -> "viidesivations"
[OK] "affiant" -> "affiant"
[ERR:2] "buzz attachment" -> "bud attachment"
[OK] "specification" -> "specification"
[OK] "utilizations tongues" -> "utilizations tongues"
[OK] "litres thirteens" -> "litres thirteens"
[OK] "watchstanding" -> "watchstanding"
[OK] "leader drains" -> "leader drains"
[OK] "depth" -> "depth"
[OK] "floor" -> "floor"
[ERR:1] "neck molecules" -> "neck molecule"
[OK] "crime" -> "crime"
[OK] "corrosion" -> "corrosion"
[OK] "shares skies" -> "shares skies"
[ERR:3] "cosals doorknob" -> "cosals dorkrnok"
[ERR:5] "radian exhaust" -> "radian event"
[OK] "classification" -> "classification"
[OK] "garden" -> "garden"
[OK] "propulsion" -> "propulsion"
[OK] "piece" -> "piece"
[OK] "turnaround forearms" -> "turnaround forearms"
[OK] "treatment" -> "treatment"
[OK] "absence capes" -> "absence capes"
[ERR:7] "splash kilometers" -> "splash film"
[OK] "alternates commitment" -> "alternates commitment"
[OK] "fifties" -> "fifties"
[OK] "twos throttle" -> "twos throttle"
[OK] "axis decoder" -> "axis decoder"
[OK] "exchangers highways" -> "exchangers highways"
[OK] "arms" -> "arms"
[ERR:2] "threader" -> "thread"
[OK] "foreground interest" -> "foreground interest"
[OK] "contamination" -> "contamination"
[OK] "writers abuse" -> "writers abuse"
[OK] "peck alley" -> "peck alley"
[OK] "listings" -> "listings"
[OK] "race" -> "race"
[OK] "sweeps electronics" -> "sweeps electronics"
[ERR:6] "cough deployment" -> "cough delctcer"
[ERR:4] "today representative" -> "today represntations"
[OK] "difficulty paw" -> "difficulty paw"
[OK] "visit" -> "visit"
[OK] "diver press" -> "diver press"
[OK] "anthems" -> "anthems"
[OK] "inclinations workload" -> "inclinations workload"
[OK] "slaves families" -> "slaves families"
[OK] "stabilization face" -> "stabilization face"
[OK] "switches" -> "switches"
[OK] "balance reinforcement" -> "balance reinforcement"
[OK] "detents" -> "detents"
[OK] "punctures" -> "punctures"
[OK] "cabinet" -> "cabinet"
[ERR:4] "products execution" -> "products action"
[OK] "screwdrivers wins" -> "screwdrivers wins"
[OK] "mention" -> "mention"
[OK] "paragraphs" -> "paragraphs"
[OK] "worries rains" -> "worries rains"
[OK] "talks proficiencies" -> "talks proficiencies"
[OK] "justice ounce" -> "justice ounce"
[OK] "motel bows" -> "motel bows"
[OK] "investment" -> "investment"
[OK] "treatment region" -> "treatment region"
[OK] "line" -> "line"
[OK] "implement" -> "implement"
[OK] "grooves" -> "grooves"
[OK] "currents fort" -> "currents fort"
[OK] "zones" -> "zones"
[OK] "drillers butt" -> "drillers butt"
[OK] "strike authority" -> "strike authority"
[OK] "shed span" -> "shed span"
[OK] "swamp" -> "swamp"
[OK] "dawn" -> "dawn"
[OK] "mattress" -> "mattress"
[OK] "appellate electricians" -> "appellate electricians"
[OK] "thumbs" -> "thumbs"
[OK] "rear" -> "rear"
[OK] "relations" -> "relations"
[OK] "stability envelopes" -> "stability envelopes"
[OK] "soups" -> "soups"
[OK] "notes" -> "notes"
[OK] "dot gangway" -> "dot gangway"
[OK] "edge" -> "edge"
[ERR:6] "inspection preservers" -> "inspection pears"
[OK] "counsel ceiling" -> "counsel ceiling"
[OK] "product road" -> "product road"
[OK] "fashions" -> "fashions"
[ERR:2] "beginner courtesy" -> "beginner courses"
[OK] "absence" -> "absence"
[OK] "throats" -> "throats"
[OK] "beginners locks" -> "beginners locks"
[OK] "gyros resistor" -> "gyros resistor"
[OK] "pin ices" -> "pin ices"
[OK] "warfare" -> "warfare"
[ERR:3] "runouts capital" -> "runouts capincr"
[OK] "damage" -> "damage"
[ERR:2] "eliminator equations" -> "eliminatorequation"
[OK] "tolerance" -> "tolerance"
[OK] "seconds" -> "seconds"
[OK] "cashiers" -> "cashiers"
[OK] "installations" -> "installations"
[OK] "wagons valleys" -> "wagons valleys"
[OK] "magnets" -> "magnets"
[OK] "victim" -> "victim"
[OK] "wafers educator" -> "wafers educator"
[OK] "stuff flare" -> "stuff flare"
[OK] "combination threaders" -> "combination threaders"
[OK] "garage" -> "garage"
[OK] "schedule coxswain" -> "schedule coxswain"
[OK] "investment" -> "investment"
[OK] "sparks lanterns" -> "sparks lanterns"
[OK] "elbow" -> "elbow"
[OK] "wars" -> "wars"
[OK] "escort" -> "escort"
[OK] "breads patterns" -> "breads patterns"
[OK] "tacks leakage" -> "tacks leakage"
[OK] "benefits deletion" -> "benefits deletion"
[OK] "pump itineraries" -> "pump itineraries"
[ERR:6] "swim documentations" -> "swim document"
[OK] "propulsion" -> "propulsion"
[ERR:5] "river conn" -> "dives cap"
[OK] "stuff" -> "stuff"
[OK] "signal refunds" -> "signal refunds"
[OK] "canisters" -> "canisters"
[OK] "markets" -> "markets"
[OK] "movements sponsors" -> "movements sponsors"
[ERR:6] "scab flower" -> "cap flag"
[OK] "barrel" -> "barrel"
[ERR:3] "plexiglass routes" -> "plexiglass rotors"
[OK] "technology secretaries" -> "technology secretaries"
[OK] "conflict" -> "conflict"
[OK] "heights interactions" -> "heights interactions"
[OK] "assembly widths" -> "assembly widths"
[OK] "hail" -> "hail"
[ERR:3] "characteristics friends" -> "characteristics fines"
[OK] "cause chances" -> "cause chances"
[ERR:3] "coughs term" -> "coughs termpom"
[OK] "baby" -> "baby"
[OK] "breakdown refrigerator" -> "breakdown refrigerator"
[OK] "segment" -> "segment"
[OK] "games" -> "games"
[OK] "act module" -> "act module"
[OK] "retrieval" -> "retrieval"
[OK] "aims probability" -> "aims probability"
[OK] "accountability" -> "accountability"
[ERR:2] "deposit precision" -> "deposit decision"
[OK] "tailor" -> "tailor"
[OK] "letter" -> "letter"
[OK] "theory" -> "theory"
[ERR:3] "hug" -> "buzz"
[OK] "funding" -> "funding"
[OK] "argument" -> "argument"
[OK] "heights separations" -> "heights separations"
[OK] "hinges" -> "hinges"
[OK] "mists cups" -> "mists cups"
[OK] "panels inlets" -> "panels inlets"
[OK] "task effectiveness" -> "task effectiveness"
[OK] "funds" -> "funds"
[OK] "stretchers" -> "stretchers"
[OK] "livers tachometer" -> "livers tachometer"
[OK] "livers noses" -> "livers noses"
[ERR:7] "torpedoes images" -> "torpedo mnatirs"
[OK] "hyphen" -> "hyphen"
[OK] "arrival" -> "arrival"
[OK] "union millimeters" -> "union millimeters"
Batch: 4 / 8
Ground truth -> Recognized
[OK] "rags" -> "rags"
[ERR:1] "hilltops" -> "hilltop"
[OK] "drift" -> "drift"
[OK] "fund" -> "fund"
[OK] "fold" -> "fold"
[OK] "ceilings club" -> "ceilings club"
[OK] "texts church" -> "texts church"
[OK] "crashes friends" -> "crashes friends"
[OK] "films" -> "films"
[OK] "aggravation" -> "aggravation"
[OK] "picks hold" -> "picks hold"
[OK] "furs headquarters" -> "furs headquarters"
[OK] "dioxides" -> "dioxides"
[ERR:4] "representative being" -> "representative babies"
[OK] "volt bank" -> "volt bank"
[OK] "ornament intensities" -> "ornament intensities"
[OK] "input" -> "input"
[ERR:1] "drum" -> "drug"
[OK] "iron challenge" -> "iron challenge"
[OK] "troubleshooters" -> "troubleshooters"
[OK] "checkout" -> "checkout"
[OK] "difficulties" -> "difficulties"
[OK] "chimney chambers" -> "chimney chambers"
[OK] "preventions" -> "preventions"
[OK] "eighths" -> "eighths"
[OK] "increases" -> "increases"
[OK] "cars welder" -> "cars welder"
[OK] "careers manifest" -> "careers manifest"
[OK] "poke blurs" -> "poke blurs"
[OK] "headsets paintings" -> "headsets paintings"
[OK] "frames residue" -> "frames residue"
[OK] "detonation" -> "detonation"
[ERR:4] "swaps pat" -> "spans man"
[OK] "lenses" -> "lenses"
[OK] "rear racks" -> "rear racks"
[OK] "tenders" -> "tenders"
[OK] "repair" -> "repair"
[OK] "infections broadcast" -> "infections broadcast"
[OK] "example malfunctions" -> "example malfunctions"
[OK] "hatchet auditor" -> "hatchet auditor"
[OK] "linkage" -> "linkage"
[OK] "diesels" -> "diesels"
[OK] "fabrications" -> "fabrications"
[OK] "eliminators spray" -> "eliminators spray"
[OK] "friday" -> "friday"
[OK] "energies" -> "energies"
[OK] "staple majority" -> "staple majority"
[OK] "spacer" -> "spacer"
[ERR:3] "panel lane" -> "pane can"
[OK] "magnitude" -> "magnitude"
[ERR:3] "withdrawal conn" -> "withdrawal car"
[OK] "bucket" -> "bucket"
[OK] "recesses" -> "recesses"
[OK] "admirals fits" -> "admirals fits"
[OK] "wines blindfold" -> "wines blindfold"
[OK] "topic magnitude" -> "topic magnitude"
[OK] "discrimination" -> "discrimination"
[OK] "duplicates dollar" -> "duplicates dollar"
[OK] "stacks programs" -> "stacks programs"
[OK] "circumference digit" -> "circumference digit"
[OK] "runaway multitask" -> "runaway multitask"
[OK] "approvals" -> "approvals"
[OK] "arrow" -> "arrow"
[ERR:7] "scales handwriting" -> "scales handler"
[ERR:4] "implantations success" -> "implantations buses"
[OK] "fireballs" -> "fireballs"
[OK] "giants obligations" -> "giants obligations"
[OK] "inquiry observations" -> "inquiry observations"
[ERR:1] "arguments" -> "argument"
[OK] "offense buzzers" -> "offense buzzers"
[OK] "auditors transformer" -> "auditors transformer"
[OK] "islands" -> "islands"
[OK] "irons" -> "irons"
[OK] "corrections replenishment" -> "corrections replenishment"
[OK] "numerals spark" -> "numerals spark"
[OK] "crowd" -> "crowd"
[OK] "perforations" -> "perforations"
[ERR:4] "authorizations subtotal" -> "authorizations subtask"
[OK] "interviews" -> "interviews"
[OK] "mornings console" -> "mornings console"
[OK] "habit concern" -> "habit concern"
[OK] "multiplication" -> "multiplication"
[OK] "fasteners anchor" -> "fasteners anchor"
[OK] "divisions" -> "divisions"
[OK] "disadvantage" -> "disadvantage"
[OK] "aggravations alignment" -> "aggravations alignment"
[OK] "propellers" -> "propellers"
[OK] "slate rating" -> "slate rating"
[OK] "button interest" -> "button interest"
[ERR:2] "whirl data" -> "whip data"
[OK] "offering" -> "offering"
[OK] "cramps" -> "cramps"
[OK] "warship" -> "warship"
[OK] "speech" -> "speech"
[OK] "winches defeat" -> "winches defeat"
[OK] "detention" -> "detention"
[OK] "toe dangers" -> "toe dangers"
[OK] "atmosphere" -> "atmosphere"
[ERR:1] "measurements" -> "measurement"
[OK] "interval navies" -> "interval navies"
[OK] "jams heights" -> "jams heights"
[OK] "bread fives" -> "bread fives"
[OK] "seesaws grease" -> "seesaws grease"
[OK] "total" -> "total"
[OK] "stapler packs" -> "stapler packs"
[OK] "embosses" -> "embosses"
[OK] "energies expenditure" -> "energies expenditure"
[OK] "dots stomachs" -> "dots stomachs"
[OK] "halves" -> "halves"
[OK] "membrane tan" -> "membrane tan"
[OK] "trouble runway" -> "trouble runway"
[OK] "drunks shed" -> "drunks shed"
[OK] "phases" -> "phases"
[ERR:2] "levels energy" -> "levels enemy"
[OK] "makeup" -> "makeup"
[OK] "guards oscillators" -> "guards oscillators"
[OK] "here" -> "here"
[OK] "rations" -> "rations"
[OK] "directories speech" -> "directories speech"
[OK] "walk quiet" -> "walk quiet"
[OK] "heel" -> "heel"
[OK] "messages" -> "messages"
[OK] "cotton computations" -> "cotton computations"
[OK] "guards" -> "guards"
[OK] "confession" -> "confession"
[OK] "visit" -> "visit"
[OK] "abrasion" -> "abrasion"
[OK] "systems tension" -> "systems tension"
[OK] "alphabet" -> "alphabet"
[OK] "densities subprograms" -> "densities subprograms"
[OK] "welder" -> "welder"
[OK] "fireballs" -> "fireballs"
[OK] "afternoon poisons" -> "afternoon poisons"
[OK] "lifeboats" -> "lifeboats"
[OK] "mouths" -> "mouths"
[OK] "tricks tourniquets" -> "tricks tourniquets"
[ERR:6] "rollouts duration" -> "fallout drain"
[OK] "particles evening" -> "particles evening"
[OK] "elections cartridge" -> "elections cartridge"
[ERR:5] "executives" -> "corecutinces"
[OK] "concurrence hatchet" -> "concurrence hatchet"
[OK] "being" -> "being"
[OK] "flashlight" -> "flashlight"
[OK] "assembly" -> "assembly"
[OK] "distributors satellites" -> "distributors satellites"
[OK] "helicopters resources" -> "helicopters resources"
[OK] "hats" -> "hats"
[OK] "volts" -> "volts"
[OK] "receptacles" -> "receptacles"
[OK] "standards pink" -> "standards pink"
[OK] "enlistments lake" -> "enlistments lake"
[OK] "limits drawer" -> "limits drawer"
[OK] "official" -> "official"
[OK] "choices recruit" -> "choices recruit"
[OK] "stroke drifts" -> "stroke drifts"
[OK] "equation suspects" -> "equation suspects"
[ERR:2] "captain eye" -> "captain age"
[ERR:3] "warehouses pipes" -> "warehouses pecks"
[OK] "food diamond" -> "food diamond"
[OK] "shape" -> "shape"
[OK] "pane vibration" -> "pane vibration"
[OK] "subroutine" -> "subroutine"
[OK] "candidates slots" -> "candidates slots"
[OK] "subroutines" -> "subroutines"
[OK] "contacts" -> "contacts"
[OK] "speed" -> "speed"
[OK] "uniforms store" -> "uniforms store"
[OK] "occasion churches" -> "occasion churches"
[OK] "edges" -> "edges"
[OK] "verse" -> "verse"
[ERR:4] "confession radar" -> "confession airs"
[OK] "regrets" -> "regrets"
[OK] "plants" -> "plants"
[OK] "window pennant" -> "window pennant"
[OK] "diagonals" -> "diagonals"
[OK] "stall" -> "stall"
[OK] "invoices" -> "invoices"
[OK] "odors milestone" -> "odors milestone"
[OK] "trust asterisks" -> "trust asterisks"
[OK] "ores" -> "ores"
[OK] "congress" -> "congress"
[OK] "pounds" -> "pounds"
[OK] "clumps vapor" -> "clumps vapor"
[OK] "gear" -> "gear"
[OK] "torpedoes offense" -> "torpedoes offense"
[OK] "outlines punishments" -> "outlines punishments"
[OK] "precautions" -> "precautions"
[OK] "holddown" -> "holddown"
[ERR:1] "pink" -> "ink"
[ERR:4] "telecommunication discrepancies" -> "telecommunication dicpncies"
[OK] "relationships" -> "relationships"
[OK] "fumes ball" -> "fumes ball"
[OK] "ventilators symbols" -> "ventilators symbols"
[OK] "facilitation decrease" -> "facilitation decrease"
[OK] "discriminations bays" -> "discriminations bays"
[OK] "hands cracks" -> "hands cracks"
[OK] "explosives statement" -> "explosives statement"
[OK] "ticket junk" -> "ticket junk"
[OK] "stairs athwartship" -> "stairs athwartship"
[OK] "chair observer" -> "chair observer"
[OK] "conversion" -> "conversion"
[OK] "kisses chair" -> "kisses chair"
[OK] "post" -> "post"
[OK] "being" -> "being"
[OK] "reliability" -> "reliability"
[OK] "lashes" -> "lashes"
[OK] "driver" -> "driver"
[OK] "electron creeks" -> "electron creeks"
[ERR:5] "acres desires" -> "acres being"
[ERR:1] "quotas" -> "quota"
[ERR:1] "appraisal signalmen" -> "appraisals signalmen"
[OK] "precedence tumble" -> "precedence tumble"
[OK] "bail invoice" -> "bail invoice"
[OK] "stairs scale" -> "stairs scale"
[OK] "weed" -> "weed"
[OK] "security nomenclatures" -> "security nomenclatures"
[OK] "crash" -> "crash"
[ERR:1] "dispatches forecastles" -> "dispatches forecastle"
[OK] "compensations" -> "compensations"
[OK] "catalogs bends" -> "catalogs bends"
[OK] "curves" -> "curves"
[OK] "victims" -> "victims"
[ERR:1] "hints thin" -> "hints thing"
[OK] "discussions" -> "discussions"
[OK] "soles discriminations" -> "soles discriminations"
[OK] "bullet brackets" -> "bullet brackets"
[OK] "departures" -> "departures"
[OK] "coxswain clerk" -> "coxswain clerk"
[OK] "stomachs" -> "stomachs"
[OK] "qualification" -> "qualification"
[OK] "distributions courts" -> "distributions courts"
[OK] "button lick" -> "button lick"
[OK] "administrator" -> "administrator"
[OK] "stripe chin" -> "stripe chin"
[OK] "receipts" -> "receipts"
[OK] "entries parameters" -> "entries parameters"
[OK] "fifths" -> "fifths"
[OK] "operand backups" -> "operand backups"
[OK] "principle sentry" -> "principle sentry"
[OK] "figure" -> "figure"
[OK] "presentations" -> "presentations"
[OK] "thirties greenwich" -> "thirties greenwich"
[OK] "lockers endeavor" -> "lockers endeavor"
[OK] "moves category" -> "moves category"
[OK] "gases" -> "gases"
[OK] "drugs" -> "drugs"
[OK] "nurses" -> "nurses"
[OK] "stings elapses" -> "stings elapses"
[OK] "milligrams" -> "milligrams"
[OK] "sides" -> "sides"
[OK] "alignments" -> "alignments"
[OK] "duplicate gear" -> "duplicate gear"
[OK] "greenwich validations" -> "greenwich validations"
[OK] "firearms" -> "firearms"
[OK] "doorknob landings" -> "doorknob landings"
[OK] "verb airport" -> "verb airport"
[OK] "cameras" -> "cameras"
[ERR:1] "possibilities divisions" -> "possibilities division"
[OK] "notice" -> "notice"
[OK] "subtotal bristles" -> "subtotal bristles"
[OK] "crops" -> "crops"
[OK] "splints swings" -> "splints swings"
[ERR:10] "occurrences procurements" -> "occurrences ratios"
[ERR:5] "excuse damage" -> "excuse air"
[OK] "gallows" -> "gallows"
[OK] "speakers diagnosis" -> "speakers diagnosis"
[OK] "daytime person" -> "daytime person"
[OK] "regions" -> "regions"
[OK] "accounts" -> "accounts"
[OK] "fruit mistake" -> "fruit mistake"
[OK] "bristle" -> "bristle"
[OK] "silver" -> "silver"
[OK] "legend formation" -> "legend formation"
[OK] "compliance knife" -> "compliance knife"
[OK] "acceleration" -> "acceleration"
[OK] "distance freezes" -> "distance freezes"
[OK] "sort" -> "sort"
[OK] "interior gloves" -> "interior gloves"
[ERR:3] "slap boilers" -> "slap boil"
[OK] "rigs" -> "rigs"
[OK] "computer" -> "computer"
[OK] "shores enemies" -> "shores enemies"
[OK] "glances songs" -> "glances songs"
[OK] "inch feature" -> "inch feature"
[OK] "wools" -> "wools"
[OK] "fiction incentive" -> "fiction incentive"
[ERR:3] "efficiencies recovery" -> "efficiencies cover"
[OK] "operators" -> "operators"
[OK] "chases clock" -> "chases clock"
[ERR:2] "edge hardships" -> "eve hardships"
[OK] "throat" -> "throat"
[OK] "reactors" -> "reactors"
[ERR:2] "skew swamp" -> "skew camp"
[OK] "claws" -> "claws"
[OK] "reels" -> "reels"
[OK] "alias" -> "alias"
[OK] "principals paste" -> "principals paste"
[OK] "spaces" -> "spaces"
[OK] "equation lesson" -> "equation lesson"
[OK] "trip egg" -> "trip egg"
[ERR:3] "string masters" -> "string mastioes"
[OK] "attitudes glazes" -> "attitudes glazes"
[OK] "operands diameters" -> "operands diameters"
[OK] "bushings" -> "bushings"
[OK] "skips similarity" -> "skips similarity"
[OK] "advisers" -> "advisers"
[ERR:4] "tourniquets procurement" -> "torques procurement"
[OK] "levers airplane" -> "levers airplane"
[OK] "participations" -> "participations"
[OK] "privileges compasses" -> "privileges compasses"
[OK] "trips" -> "trips"
[OK] "applications animals" -> "applications animals"
[OK] "solder tars" -> "solder tars"
[OK] "pacific" -> "pacific"
[OK] "duration solvents" -> "duration solvents"
[ERR:4] "sister lashes" -> "sister gas"
[OK] "stoppering" -> "stoppering"
[OK] "hardness burns" -> "hardness burns"
[OK] "readiness mills" -> "readiness mills"
[OK] "application" -> "application"
[OK] "curvature courts" -> "curvature courts"
[OK] "months" -> "months"
[OK] "fall" -> "fall"
[OK] "language table" -> "language table"
[OK] "bandages" -> "bandages"
[OK] "stack leaks" -> "stack leaks"
[OK] "dust cockpits" -> "dust cockpits"
[OK] "dishes boxcar" -> "dishes boxcar"
[OK] "services" -> "services"
[OK] "union" -> "union"
[OK] "motions prime" -> "motions prime"
[OK] "knocks slate" -> "knocks slate"
[OK] "lifetime" -> "lifetime"
[OK] "debt" -> "debt"
[OK] "capacities" -> "capacities"
[OK] "accusation" -> "accusation"
[OK] "worm tear" -> "worm tear"
[OK] "tactics" -> "tactics"
[OK] "precaution workload" -> "precaution workload"
[OK] "stretcher" -> "stretcher"
[OK] "charts" -> "charts"
[ERR:1] "coders cameras" -> "coders camera"
[OK] "oaks here" -> "oaks here"
[OK] "surprise" -> "surprise"
[OK] "watches market" -> "watches market"
[OK] "saddles" -> "saddles"
[OK] "rating" -> "rating"
[ERR:4] "shelter pointer" -> "shelter coin"
[OK] "stakes" -> "stakes"
[OK] "mixture" -> "mixture"
[ERR:5] "slots stoppered" -> "slots stop"
[OK] "abuses raises" -> "abuses raises"
[OK] "eligibility automobiles" -> "eligibility automobiles"
[OK] "petitions difficulty" -> "petitions difficulty"
[OK] "outlines" -> "outlines"
[OK] "ration" -> "ration"
[OK] "builder skips" -> "builder skips"
[OK] "neck" -> "neck"
[ERR:6] "parcels" -> "coal"
[OK] "directories" -> "directories"
[OK] "spades" -> "spades"
[OK] "warship flight" -> "warship flight"
[OK] "photodiode" -> "photodiode"
[OK] "mornings" -> "mornings"
[OK] "standardization laws" -> "standardization laws"
[OK] "petitions wonder" -> "petitions wonder"
[OK] "seam" -> "seam"
[OK] "switches legislation" -> "switches legislation"
[ERR:1] "creek" -> "creeks"
[OK] "binders" -> "binders"
[OK] "morning" -> "morning"
[OK] "linkage horizons" -> "linkage horizons"
[OK] "retractor furnace" -> "retractor furnace"
[OK] "artilleries" -> "artilleries"
[OK] "lanterns choke" -> "lanterns choke"
[OK] "additions" -> "additions"
[OK] "sticks" -> "sticks"
[OK] "effort ohm" -> "effort ohm"
[ERR:3] "dispatcher jurisdiction" -> "dispatcher yrsdiction"
[OK] "sale chart" -> "sale chart"
[OK] "front department" -> "front department"
[OK] "december" -> "december"
[OK] "baths result" -> "baths result"
[OK] "breaches" -> "breaches"
[ERR:2] "breakdown workman" -> "breakdown woman"
[OK] "guides discounts" -> "guides discounts"
[OK] "pack" -> "pack"
[OK] "substance" -> "substance"
[OK] "rockets end" -> "rockets end"
[ERR:1] "displacement hill" -> "displacement kill"
[OK] "polish gunnery" -> "polish gunnery"
[OK] "card" -> "card"
[OK] "sons" -> "sons"
[ERR:2] "drum form" -> "drum fogs"
[OK] "cruiser" -> "cruiser"
[OK] "searchlight" -> "searchlight"
[OK] "gyros anthem" -> "gyros anthem"
[OK] "nuts" -> "nuts"
[OK] "pencils detection" -> "pencils detection"
[OK] "chair" -> "chair"
[OK] "kisses" -> "kisses"
[OK] "management" -> "management"
[OK] "runaway" -> "runaway"
[OK] "default" -> "default"
[OK] "meals bubbles" -> "meals bubbles"
[OK] "glossary wines" -> "glossary wines"
[OK] "electronics curls" -> "electronics curls"
[OK] "practice receptacles" -> "practice receptacles"
[OK] "pen" -> "pen"
[ERR:5] "explanations projects" -> "explanations pole"
[OK] "heat" -> "heat"
[OK] "cameras chases" -> "cameras chases"
[ERR:2] "sprayer" -> "spray"
[OK] "cry figure" -> "cry figure"
[OK] "bat system" -> "bat system"
[OK] "bit" -> "bit"
[ERR:4] "engines workload" -> "engines work"
[OK] "talk screwdriver" -> "talk screwdriver"
[OK] "cannon" -> "cannon"
[OK] "foods" -> "foods"
[OK] "compressor" -> "compressor"
[OK] "ramp streets" -> "ramp streets"
[OK] "patterns greenwich" -> "patterns greenwich"
[OK] "practice" -> "practice"
[OK] "pushups" -> "pushups"
[OK] "apprenticeship" -> "apprenticeship"
[OK] "countries saps" -> "countries saps"
[OK] "dam" -> "dam"
[ERR:3] "displacements mist" -> "displacements misses"
[OK] "measure" -> "measure"
[OK] "canisters title" -> "canisters title"
[OK] "violations relief" -> "violations relief"
[ERR:4] "conjunction possession" -> "conjunction position"
[OK] "fighter" -> "fighter"
[OK] "traps" -> "traps"
[OK] "sections work" -> "sections work"
[OK] "rifles alloys" -> "rifles alloys"
[OK] "people" -> "people"
[OK] "backup" -> "backup"
[OK] "transactions" -> "transactions"
[OK] "privileges electrodes" -> "privileges electrodes"
[ERR:4] "introduction barriers" -> "introduction barge"
[OK] "index groups" -> "index groups"
[OK] "fake" -> "fake"
[OK] "nut" -> "nut"
[OK] "instances" -> "instances"
[OK] "confidences" -> "confidences"
[OK] "category" -> "category"
[OK] "rules honk" -> "rules honk"
[OK] "cavity indicator" -> "cavity indicator"
[OK] "retrievals" -> "retrievals"
[OK] "hits" -> "hits"
[OK] "grasses eye" -> "grasses eye"
[OK] "occurrence" -> "occurrence"
[OK] "device certificate" -> "device certificate"
[OK] "terminations" -> "terminations"
[OK] "compressions swamps" -> "compressions swamps"
[OK] "profiles" -> "profiles"
[OK] "customs" -> "customs"
[OK] "work" -> "work"
[ERR:1] "execution numbers" -> "execution number"
[OK] "search" -> "search"
[OK] "cycles sentence" -> "cycles sentence"
[OK] "silicon" -> "silicon"
[OK] "lids offers" -> "lids offers"
[OK] "generation barge" -> "generation barge"
[OK] "proficiency" -> "proficiency"
[OK] "alcoholism" -> "alcoholism"
[OK] "sting technique" -> "sting technique"
[OK] "lifetime" -> "lifetime"
[OK] "value" -> "value"
[OK] "fee sums" -> "fee sums"
[ERR:3] "source freshwater" -> "source freshwal"
[OK] "boils" -> "boils"
[OK] "alibis" -> "alibis"
[OK] "focuses" -> "focuses"
[OK] "bushel pointers" -> "bushel pointers"
[OK] "tons pay" -> "tons pay"
[OK] "mouths" -> "mouths"
[OK] "north interfaces" -> "north interfaces"
[OK] "hem" -> "hem"
[OK] "neglect mittens" -> "neglect mittens"
[OK] "fluids" -> "fluids"
[ERR:1] "savings" -> "saving"
[ERR:6] "telecommunications locks" -> "telecommunications"
[OK] "presents news" -> "presents news"
[OK] "pedal" -> "pedal"
[OK] "test bullets" -> "test bullets"
[OK] "sale" -> "sale"
[OK] "members" -> "members"
[OK] "definitions" -> "definitions"
[OK] "spill twist" -> "spill twist"
[OK] "trace" -> "trace"
[ERR:4] "average" -> "arrays"
[ERR:5] "transmittals subtotal" -> "transmittals metal"
[OK] "totals" -> "totals"
[ERR:1] "sons" -> "son"
[OK] "troops" -> "troops"
[OK] "tapes bills" -> "tapes bills"
[OK] "recess detail" -> "recess detail"
Batch: 5 / 8
Ground truth -> Recognized
[OK] "counsel" -> "counsel"
[OK] "objects" -> "objects"
[OK] "magnet rail" -> "magnet rail"
[OK] "responsibility" -> "responsibility"
[ERR:6] "hydraulics attorneys" -> "hydraulics atom"
[OK] "beds" -> "beds"
[OK] "pail" -> "pail"
[OK] "currencies mile" -> "currencies mile"
[OK] "web cars" -> "web cars"
[OK] "ranges" -> "ranges"
[OK] "opportunities" -> "opportunities"
[OK] "sashes" -> "sashes"
[OK] "debris" -> "debris"
[OK] "dates" -> "dates"
[OK] "cost" -> "cost"
[OK] "alerts interfaces" -> "alerts interfaces"
[OK] "topside refrigerators" -> "topside refrigerators"
[OK] "display" -> "display"
[OK] "center" -> "center"
[OK] "settings" -> "settings"
[OK] "pots" -> "pots"
[ERR:2] "recess flaps" -> "races flaps"
[OK] "trainer" -> "trainer"
[OK] "aid intakes" -> "aid intakes"
[OK] "things tear" -> "things tear"
[OK] "pocket" -> "pocket"
[OK] "rim" -> "rim"
[OK] "velocities drops" -> "velocities drops"
[OK] "spars" -> "spars"
[ERR:1] "reconfigurations presences" -> "reconfigurationspresences"
[OK] "court" -> "court"
[OK] "tunnel" -> "tunnel"
[OK] "ax majors" -> "ax majors"
[OK] "cellars" -> "cellars"
[OK] "computations log" -> "computations log"
[OK] "beam" -> "beam"
[OK] "latitude surplus" -> "latitude surplus"
[OK] "highline" -> "highline"
[OK] "navigators bigamies" -> "navigators bigamies"
[OK] "offset" -> "offset"
[OK] "electricians" -> "electricians"
[OK] "scheduler" -> "scheduler"
[OK] "students" -> "students"
[OK] "swamps" -> "swamps"
[OK] "fastener credit" -> "fastener credit"
[OK] "inlets" -> "inlets"
[OK] "abrasives" -> "abrasives"
[OK] "door photograph" -> "door photograph"
[OK] "trunk speech" -> "trunk speech"
[OK] "chests signal" -> "chests signal"
[OK] "account" -> "account"
[OK] "pane" -> "pane"
[OK] "yard writers" -> "yard writers"
[OK] "azimuth pleasure" -> "azimuth pleasure"
[OK] "leaks splicer" -> "leaks splicer"
[OK] "preserver" -> "preserver"
[OK] "accomplishments" -> "accomplishments"
[OK] "connections keyboards" -> "connections keyboards"
[OK] "fighters needles" -> "fighters needles"
[OK] "harpoons greenwich" -> "harpoons greenwich"
[OK] "swallow thursdays" -> "swallow thursdays"
[OK] "flag" -> "flag"
[OK] "requirements jars" -> "requirements jars"
[OK] "jelly" -> "jelly"
[OK] "shift endeavor" -> "shift endeavor"
[OK] "sediments" -> "sediments"
[OK] "tents ax" -> "tents ax"
[OK] "fog" -> "fog"
[OK] "transformers" -> "transformers"
[OK] "reproduction" -> "reproduction"
[OK] "paces wage" -> "paces wage"
[OK] "share" -> "share"
[OK] "features plans" -> "features plans"
[OK] "allotments" -> "allotments"
[OK] "precision debris" -> "precision debris"
[ERR:1] "offenses" -> "offense"
[OK] "chills women" -> "chills women"
[OK] "dioxide example" -> "dioxide example"
[OK] "relations swimmer" -> "relations swimmer"
[OK] "relationship" -> "relationship"
[OK] "rejections interpreters" -> "rejections interpreters"
[OK] "principal" -> "principal"
[OK] "pyramid coast" -> "pyramid coast"
[OK] "scene gland" -> "scene gland"
[OK] "tablespoon implantations" -> "tablespoon implantations"
[OK] "missile spans" -> "missile spans"
[OK] "reservists" -> "reservists"
[OK] "eases titles" -> "eases titles"
[OK] "arrivals meeting" -> "arrivals meeting"
[OK] "movement net" -> "movement net"
[OK] "ending" -> "ending"
[OK] "distress" -> "distress"
[OK] "analyses diagram" -> "analyses diagram"
[OK] "state" -> "state"
[OK] "nod wheel" -> "nod wheel"
[OK] "facepieces subtotals" -> "facepieces subtotals"
[OK] "beads proficiencies" -> "beads proficiencies"
[OK] "observer" -> "observer"
[OK] "adviser night" -> "adviser night"
[OK] "dangers" -> "dangers"
[OK] "threads interference" -> "threads interference"
[OK] "collection experiences" -> "collection experiences"
[OK] "road comfort" -> "road comfort"
[OK] "sharpeners lubrication" -> "sharpeners lubrication"
[OK] "equipment" -> "equipment"
[OK] "dopes" -> "dopes"
[OK] "fathers roller" -> "fathers roller"
[OK] "account attempts" -> "account attempts"
[OK] "discretion bristle" -> "discretion bristle"
[OK] "presumptions" -> "presumptions"
[OK] "continuity video" -> "continuity video"
[OK] "sheeting" -> "sheeting"
[OK] "pattern dates" -> "pattern dates"
[OK] "apprenticeship projects" -> "apprenticeship projects"
[OK] "audit tables" -> "audit tables"
[OK] "island" -> "island"
[OK] "mornings money" -> "mornings money"
[OK] "taxis" -> "taxis"
[OK] "abuse consideration" -> "abuse consideration"
[OK] "displacement tune" -> "displacement tune"
[OK] "airplane" -> "airplane"
[OK] "fiction" -> "fiction"
[ERR:3] "complements degree" -> "complements dare"
[ERR:3] "axis" -> "davits"
[OK] "utility assembly" -> "utility assembly"
[OK] "cities" -> "cities"
[ERR:2] "pick cargo" -> "pick car"
[ERR:4] "merchandise shame" -> "merchandise sinks"
[OK] "drink" -> "drink"
[OK] "warship" -> "warship"
[OK] "delivery" -> "delivery"
[OK] "decay logic" -> "decay logic"
[OK] "flashlight" -> "flashlight"
[OK] "divider" -> "divider"
[OK] "draft" -> "draft"
[OK] "anthems" -> "anthems"
[OK] "fist rebounds" -> "fist rebounds"
[OK] "majors smiles" -> "majors smiles"
[ERR:5] "lumber" -> "lumber wood"
[OK] "scheduler housefall" -> "scheduler housefall"
[ERR:2] "blasts preference" -> "blast preferences"
[OK] "menus yolk" -> "menus yolk"
[OK] "location" -> "location"
[OK] "longitudes insanities" -> "longitudes insanities"
[OK] "beacons bushes" -> "beacons bushes"
[OK] "definitions countries" -> "definitions countries"
[OK] "canister" -> "canister"
[OK] "swims board" -> "swims board"
[OK] "valley mirror" -> "valley mirror"
[OK] "population" -> "population"
[OK] "extras ramps" -> "extras ramps"
[ERR:2] "butt springs" -> "bat springs"
[ERR:5] "lumber" -> "lumber wood"
[OK] "foam" -> "foam"
[OK] "projectile coder" -> "projectile coder"
[OK] "flap" -> "flap"
[OK] "coordinates additives" -> "coordinates additives"
[OK] "fives car" -> "fives car"
[OK] "cautions" -> "cautions"
[OK] "twos" -> "twos"
[OK] "lips" -> "lips"
[OK] "aircraft" -> "aircraft"
[OK] "pattern moves" -> "pattern moves"
[OK] "intents" -> "intents"
[OK] "remainder bars" -> "remainder bars"
[OK] "splints towels" -> "splints towels"
[OK] "concentration" -> "concentration"
[OK] "wingnuts cups" -> "wingnuts cups"
[OK] "delight schoolhouses" -> "delight schoolhouses"
[OK] "substitute shell" -> "substitute shell"
[OK] "hotel jump" -> "hotel jump"
[OK] "gangway" -> "gangway"
[OK] "technicians" -> "technicians"
[ERR:1] "grasp area" -> "grasp areas"
[OK] "disk bet" -> "disk bet"
[OK] "animals purges" -> "animals purges"
[OK] "attack" -> "attack"
[OK] "binoculars" -> "binoculars"
[OK] "reservoirs holds" -> "reservoirs holds"
[OK] "survey" -> "survey"
[OK] "thicknesses" -> "thicknesses"
[ERR:4] "associates breakdown" -> "associates break"
[OK] "shells" -> "shells"
[OK] "holes problems" -> "holes problems"
[OK] "frigates" -> "frigates"
[OK] "chaplains dollies" -> "chaplains dollies"
[OK] "alibi mast" -> "alibi mast"
[OK] "compass" -> "compass"
[OK] "sips" -> "sips"
[OK] "stages" -> "stages"
[OK] "seam" -> "seam"
[OK] "dispatcher" -> "dispatcher"
[OK] "repairs forms" -> "repairs forms"
[OK] "advantages" -> "advantages"
[ERR:3] "launches pen" -> "launches linen"
[ERR:2] "log" -> "toe"
[OK] "drunkeness rods" -> "drunkeness rods"
[OK] "hillside" -> "hillside"
[ERR:14] "aggravation lieutenants" -> "variation view"
[OK] "drydocks plays" -> "drydocks plays"
[ERR:2] "exit bail" -> "bit bail"
[ERR:6] "ceremony victims" -> "ceremony yoriine"
[OK] "person" -> "person"
[OK] "traffic" -> "traffic"
[OK] "valleys" -> "valleys"
[OK] "amperage" -> "amperage"
[OK] "results" -> "results"
[OK] "clearance siren" -> "clearance siren"
[OK] "toothpick" -> "toothpick"
[OK] "figures senses" -> "figures senses"
[OK] "establishments" -> "establishments"
[OK] "detection" -> "detection"
[OK] "throttles prices" -> "throttles prices"
[ERR:6] "links specifications" -> "links specifice"
[OK] "discounts" -> "discounts"
[OK] "alphabet depths" -> "alphabet depths"
[OK] "solenoids" -> "solenoids"
[OK] "helmets" -> "helmets"
[OK] "escape nurses" -> "escape nurses"
[OK] "displacement" -> "displacement"
[OK] "reaction pointer" -> "reaction pointer"
[OK] "waxes grasses" -> "waxes grasses"
[OK] "remainders clips" -> "remainders clips"
[OK] "usage" -> "usage"
[ERR:4] "blinks memory" -> "blinks hem"
[OK] "bushing readers" -> "bushing readers"
[OK] "coughs" -> "coughs"
[OK] "sap" -> "sap"
[OK] "discontinuation" -> "discontinuation"
[OK] "hoist time" -> "hoist time"
[OK] "preparations" -> "preparations"
[ERR:2] "butts whips" -> "bats whips"
[OK] "searchlights rule" -> "searchlights rule"
[OK] "cube semicolons" -> "cube semicolons"
[ERR:1] "bowl mattress" -> "boil mattress"
[ERR:2] "carriage futures" -> "carriage features"
[OK] "milestone crowns" -> "milestone crowns"
[OK] "salts entrance" -> "salts entrance"
[OK] "curls" -> "curls"
[OK] "saving" -> "saving"
[OK] "crowds software" -> "crowds software"
[OK] "miss" -> "miss"
[OK] "lee rudders" -> "lee rudders"
[OK] "legislation glue" -> "legislation glue"
[OK] "insertions" -> "insertions"
[OK] "bows entrapment" -> "bows entrapment"
[OK] "meaning" -> "meaning"
[OK] "conventions bottoms" -> "conventions bottoms"
[OK] "coin confusions" -> "coin confusions"
[OK] "lime" -> "lime"
[OK] "arrivals" -> "arrivals"
[OK] "passes fetch" -> "passes fetch"
[OK] "audits" -> "audits"
[OK] "mat" -> "mat"
[OK] "experience coughs" -> "experience coughs"
[OK] "burns carts" -> "burns carts"
[OK] "receptacle" -> "receptacle"
[OK] "fighter" -> "fighter"
[OK] "rejection termination" -> "rejection termination"
[OK] "gyroscopes" -> "gyroscopes"
[ERR:1] "casualties lifeboats" -> "casualties lifeboat"
[OK] "chatter" -> "chatter"
[OK] "combatant" -> "combatant"
[OK] "ways structures" -> "ways structures"
[OK] "elimination" -> "elimination"
[OK] "propellers rims" -> "propellers rims"
[OK] "fumes mint" -> "fumes mint"
[OK] "trouble" -> "trouble"
[OK] "arrival" -> "arrival"
[OK] "limp alcohol" -> "limp alcohol"
[OK] "assistant abrasion" -> "assistant abrasion"
[OK] "restriction" -> "restriction"
[OK] "originators stations" -> "originators stations"
[OK] "story dolly" -> "story dolly"
[OK] "confidences" -> "confidences"
[OK] "nurse hushes" -> "nurse hushes"
[OK] "nozzle" -> "nozzle"
[OK] "cot" -> "cot"
[OK] "fruits instrument" -> "fruits instrument"
[OK] "shower syntax" -> "shower syntax"
[OK] "folds" -> "folds"
[ERR:4] "battle module" -> "battle bolt"
[OK] "analyzer facepiece" -> "analyzer facepiece"
[ERR:4] "regions book" -> "regions beads"
[OK] "witnesses forts" -> "witnesses forts"
[OK] "thumb arrivals" -> "thumb arrivals"
[OK] "allotments tunnels" -> "allotments tunnels"
[ERR:2] "sponsor rejections" -> "sponsor reactions"
[OK] "fees pitches" -> "fees pitches"
[OK] "energy" -> "energy"
[OK] "arrays" -> "arrays"
[OK] "tubing" -> "tubing"
[OK] "software automation" -> "software automation"
[OK] "deployment" -> "deployment"
[OK] "much" -> "much"
[OK] "afternoon washtub" -> "afternoon washtub"
[OK] "accomplishment" -> "accomplishment"
[OK] "valves" -> "valves"
[ERR:3] "grips misconduct" -> "grips miscond"
[OK] "hazard" -> "hazard"
[OK] "holddowns august" -> "holddowns august"
[OK] "fits" -> "fits"
[OK] "butts" -> "butts"
[ERR:4] "acquittals emitter" -> "acquittals letters"
[OK] "learning" -> "learning"
[OK] "bays habits" -> "bays habits"
[ERR:4] "mounts tax" -> "mounts arch"
[OK] "concepts" -> "concepts"
[OK] "bore" -> "bore"
[OK] "environments equipment" -> "environments equipment"
[OK] "gate" -> "gate"
[OK] "falls" -> "falls"
[ERR:1] "buoys marbles" -> "buys marbles"
[OK] "surpluses adherence" -> "surpluses adherence"
[OK] "initiator cylinders" -> "initiator cylinders"
[ERR:1] "stoppers tips" -> "stoppers trips"
[OK] "ticks" -> "ticks"
[OK] "runouts forts" -> "runouts forts"
[OK] "park harmony" -> "park harmony"
[OK] "diodes" -> "diodes"
[OK] "medicines search" -> "medicines search"
[OK] "funds" -> "funds"
[OK] "lifeboats" -> "lifeboats"
[OK] "receipts" -> "receipts"
[OK] "feed ships" -> "feed ships"
[OK] "discrepancy improvements" -> "discrepancy improvements"
[OK] "steams" -> "steams"
[ERR:2] "hunt chair" -> "hunt car"
[OK] "thumb velocities" -> "thumb velocities"
[OK] "sound" -> "sound"
[OK] "variety" -> "variety"
[OK] "yield jacket" -> "yield jacket"
[OK] "balloons" -> "balloons"
[OK] "hill launcher" -> "hill launcher"
[OK] "screens" -> "screens"
[OK] "bristle float" -> "bristle float"
[OK] "infection" -> "infection"
[OK] "apportionment" -> "apportionment"
[OK] "switches encounter" -> "switches encounter"
[OK] "sequences fluids" -> "sequences fluids"
[OK] "retrievals mountains" -> "retrievals mountains"
[OK] "interview" -> "interview"
[OK] "curtains" -> "curtains"
[OK] "transistors" -> "transistors"
[ERR:2] "malfunction eraser" -> "malfunction eases"
[OK] "judge artillery" -> "judge artillery"
[OK] "amount" -> "amount"
[OK] "spaces" -> "spaces"
[OK] "correction" -> "correction"
[ERR:1] "districts pulls" -> "districts pull"
[OK] "races jams" -> "races jams"
[OK] "barrier" -> "barrier"
[OK] "quiets" -> "quiets"
[OK] "exchange warships" -> "exchange warships"
[ERR:7] "advantages radiation" -> "daduntaes grcdization"
[OK] "blazes prop" -> "blazes prop"
[ERR:1] "ingredients" -> "ingredient"
[OK] "amperage checker" -> "amperage checker"
[OK] "supermarkets" -> "supermarkets"
[OK] "cheek" -> "cheek"
[OK] "bears" -> "bears"
[OK] "hunks" -> "hunks"
[OK] "trip" -> "trip"
[OK] "connections ices" -> "connections ices"
[OK] "implantations percentages" -> "implantations percentages"
[OK] "grasses" -> "grasses"
[OK] "classifications" -> "classifications"
[OK] "closures box" -> "closures box"
[OK] "respiration" -> "respiration"
[OK] "checker" -> "checker"
[OK] "nuts translator" -> "nuts translator"
[ERR:4] "huts binders" -> "huts bin"
[OK] "riding manifest" -> "riding manifest"
[ERR:2] "wagons dusts" -> "wagons cuts"
[OK] "searchlights" -> "searchlights"
[OK] "fires wagon" -> "fires wagon"
[OK] "dispatcher flowers" -> "dispatcher flowers"
[OK] "spoke" -> "spoke"
[ERR:9] "configuration installations" -> "configuration ideals"
[OK] "cab confinement" -> "cab confinement"
[OK] "visions" -> "visions"
[OK] "navigators" -> "navigators"
[OK] "analyzers" -> "analyzers"
[OK] "smokes" -> "smokes"
[OK] "complexes" -> "complexes"
[OK] "daughters" -> "daughters"
[OK] "levers" -> "levers"
[OK] "pulse" -> "pulse"
[OK] "buoy" -> "buoy"
[OK] "kinds" -> "kinds"
[OK] "terminators means" -> "terminators means"
[OK] "drips" -> "drips"
[OK] "originals" -> "originals"
[OK] "harbor" -> "harbor"
[OK] "preposition propellers" -> "preposition propellers"
[ERR:7] "seawater adverbs" -> "heater acres"
[OK] "rice" -> "rice"
[OK] "methodology frequencies" -> "methodology frequencies"
[OK] "paints" -> "paints"
[OK] "auditor" -> "auditor"
[OK] "stocks ramp" -> "stocks ramp"
[OK] "amplitude sentence" -> "amplitude sentence"
[OK] "strips" -> "strips"
[OK] "governors firearm" -> "governors firearm"
[OK] "discrimination" -> "discrimination"
[OK] "alignments" -> "alignments"
[OK] "house rose" -> "house rose"
[OK] "diagnosis asterisk" -> "diagnosis asterisk"
[OK] "cameras" -> "cameras"
[OK] "couple" -> "couple"
[ERR:1] "needs" -> "need"
[OK] "friday" -> "friday"
[OK] "juries" -> "juries"
[OK] "strengths" -> "strengths"
[OK] "coats" -> "coats"
[OK] "accountabilities charts" -> "accountabilities charts"
[ERR:1] "guesses prints" -> "guesses print"
[OK] "island" -> "island"
[OK] "patter" -> "patter"
[ERR:3] "misfit" -> "mosixt"
[OK] "mitts longitudes" -> "mitts longitudes"
[OK] "delivery" -> "delivery"
[OK] "stitch monday" -> "stitch monday"
[OK] "divider exit" -> "divider exit"
[OK] "execution" -> "execution"
[OK] "defect" -> "defect"
[OK] "capability" -> "capability"
[OK] "fantails" -> "fantails"
[OK] "signal cushions" -> "signal cushions"
[OK] "pyramid clocks" -> "pyramid clocks"
[OK] "chits" -> "chits"
[OK] "leaps kinds" -> "leaps kinds"
[OK] "picks" -> "picks"
[OK] "capital" -> "capital"
[OK] "bunch" -> "bunch"
[ERR:1] "mouths" -> "mouth"
[OK] "caves targets" -> "caves targets"
[OK] "crosses" -> "crosses"
[OK] "circulations" -> "circulations"
[OK] "flaps yarns" -> "flaps yarns"
[ERR:1] "compromises grain" -> "compromises grains"
[OK] "zones square" -> "zones square"
[OK] "interviewer" -> "interviewer"
[OK] "tone" -> "tone"
[OK] "roar splitters" -> "roar splitters"
[ERR:3] "semicolon bend" -> "semicolon beats"
[OK] "electrolyte mission" -> "electrolyte mission"
[OK] "tool hint" -> "tool hint"
[OK] "coupling capacitances" -> "coupling capacitances"
[OK] "frost" -> "frost"
[OK] "yaws" -> "yaws"
[OK] "region" -> "region"
[OK] "passivation" -> "passivation"
[OK] "prime societies" -> "prime societies"
[OK] "merchants" -> "merchants"
[OK] "cellars" -> "cellars"
[ERR:1] "stern drops" -> "stern drop"
[OK] "families lee" -> "families lee"
[OK] "cents tractor" -> "cents tractor"
[OK] "piece parachute" -> "piece parachute"
[OK] "hotels settlements" -> "hotels settlements"
[ERR:1] "verbs article" -> "verb article"
[OK] "indications" -> "indications"
[ERR:4] "idea" -> "bilge"
[OK] "nomenclature" -> "nomenclature"
[OK] "calibrations" -> "calibrations"
[OK] "integer" -> "integer"
[OK] "governor" -> "governor"
[OK] "wrists" -> "wrists"
[OK] "glide" -> "glide"
[OK] "misalignment" -> "misalignment"
[OK] "manner ventilation" -> "manner ventilation"
[OK] "strike place" -> "strike place"
[OK] "jails cents" -> "jails cents"
[OK] "fakes" -> "fakes"
[OK] "respiration pilots" -> "respiration pilots"
[OK] "tires pegs" -> "tires pegs"
[OK] "velocity" -> "velocity"
[OK] "orange" -> "orange"
[ERR:1] "pay listings" -> "pay listing"
[OK] "sunday driller" -> "sunday driller"
[OK] "topic" -> "topic"
[OK] "administration cellar" -> "administration cellar"
[OK] "cups" -> "cups"
[OK] "rumbles" -> "rumbles"
[OK] "look" -> "look"
[ERR:4] "bigamies sod" -> "bigamies nests"
[OK] "rugs" -> "rugs"
[OK] "employee" -> "employee"
[ERR:6] "suppression license" -> "suppression danger"
[OK] "buildings" -> "buildings"
[OK] "abilities administrators" -> "abilities administrators"
[OK] "advertisement" -> "advertisement"
[ERR:4] "increments jump" -> "increments yuytms"
[OK] "side setup" -> "side setup"
[OK] "instances chattel" -> "instances chattel"
[OK] "physics" -> "physics"
[OK] "poisons" -> "poisons"
[OK] "energizers screams" -> "energizers screams"
[OK] "task rejection" -> "task rejection"
Batch: 6 / 8
Ground truth -> Recognized
[OK] "lint tables" -> "lint tables"
[OK] "employee" -> "employee"
[ERR:2] "earth surplus" -> "berth surplus"
[OK] "formats" -> "formats"
[OK] "slash" -> "slash"
[ERR:1] "chits pops" -> "chits pop"
[OK] "hillside formation" -> "hillside formation"
[OK] "baseline" -> "baseline"
[OK] "mattresses" -> "mattresses"
[OK] "offsets pail" -> "offsets pail"
[OK] "standing" -> "standing"
[OK] "dives doorsteps" -> "dives doorsteps"
[OK] "dissemination" -> "dissemination"
[OK] "groom currents" -> "groom currents"
[OK] "attempts" -> "attempts"
[OK] "affiants" -> "affiants"
[ERR:3] "proportion reservoirs" -> "portion reservoirs"
[OK] "apostrophes" -> "apostrophes"
[OK] "bather spar" -> "bather spar"
[OK] "velocities" -> "velocities"
[OK] "screen" -> "screen"
[OK] "airspeed" -> "airspeed"
[OK] "lids setting" -> "lids setting"
[OK] "driller" -> "driller"
[OK] "duplicates blankets" -> "duplicates blankets"
[OK] "grains architecture" -> "grains architecture"
[ERR:2] "farads intelligences" -> "cards intelligences"
[OK] "hashmark" -> "hashmark"
[OK] "interpreters" -> "interpreters"
[ERR:2] "seesaw stowage" -> "seesaw stage"
[OK] "hardships" -> "hardships"
[OK] "paste" -> "paste"
[OK] "mention" -> "mention"
[ERR:1] "smiles projectiles" -> "smiles projectile"
[ERR:2] "communications blocks" -> "communications backs"
[ERR:1] "feathers" -> "fathers"
[ERR:4] "peg substance" -> "peg subtask"
[OK] "glossaries" -> "glossaries"
[OK] "reveille" -> "reveille"
[OK] "bottom fort" -> "bottom fort"
[OK] "semaphores proof" -> "semaphores proof"
[OK] "unions" -> "unions"
[OK] "apparatuses" -> "apparatuses"
[ERR:9] "ampere suction" -> "crropre aviation"
[OK] "blackboard" -> "blackboard"
[OK] "platform mist" -> "platform mist"
[OK] "amplifier" -> "amplifier"
[OK] "offenses" -> "offenses"
[OK] "sprayers" -> "sprayers"
[OK] "highline" -> "highline"
[OK] "documentation profession" -> "documentation profession"
[OK] "mills butt" -> "mills butt"
[OK] "radiation resources" -> "radiation resources"
[ERR:4] "paygrade" -> "page"
[OK] "saying boresights" -> "saying boresights"
[OK] "standards angle" -> "standards angle"
[OK] "gangways experiences" -> "gangways experiences"
[OK] "enclosure" -> "enclosure"
[OK] "candidates kiloliters" -> "candidates kiloliters"
[ERR:2] "jobs counters" -> "ribs counters"
[OK] "bag chimneys" -> "bag chimneys"
[OK] "liberties category" -> "liberties category"
[OK] "temperature sight" -> "temperature sight"
[OK] "outing sense" -> "outing sense"
[OK] "incentive decibel" -> "incentive decibel"
[ERR:1] "nights surges" -> "nights surge"
[OK] "ceramics" -> "ceramics"
[OK] "pencil henrys" -> "pencil henrys"
[OK] "abbreviations" -> "abbreviations"
[ERR:1] "confinements reel" -> "confinements reels"
[OK] "events constitution" -> "events constitution"
[OK] "monitors chimneys" -> "monitors chimneys"
[ERR:3] "cleanser electricity" -> "cleanser relectrity"
[OK] "growth difference" -> "growth difference"
[OK] "capes end" -> "capes end"
[OK] "directions" -> "directions"
[OK] "wrench" -> "wrench"
[OK] "keywords" -> "keywords"
[OK] "tenths hammer" -> "tenths hammer"
[ERR:1] "polish exchanges" -> "polishexchanges"
[OK] "stripe stitches" -> "stripe stitches"
[ERR:2] "dictionary combs" -> "dictionary camps"
[OK] "bypass" -> "bypass"
[OK] "protests" -> "protests"
[OK] "investigator" -> "investigator"
[OK] "key" -> "key"
[OK] "wrap" -> "wrap"
[OK] "thins" -> "thins"
[OK] "abuses" -> "abuses"
[OK] "stories calorie" -> "stories calorie"
[OK] "choke" -> "choke"
[OK] "correlations" -> "correlations"
[OK] "shotline" -> "shotline"
[OK] "posts throttles" -> "posts throttles"
[OK] "disciplines apprehensions" -> "disciplines apprehensions"
[OK] "mirrors root" -> "mirrors root"
[OK] "tape" -> "tape"
[OK] "bails center" -> "bails center"
[OK] "november" -> "november"
[OK] "procurements fund" -> "procurements fund"
[OK] "fabrications" -> "fabrications"
[OK] "accelerations lights" -> "accelerations lights"
[ERR:4] "gyroscope" -> "gyros"
[ERR:4] "resistance stumps" -> "resistance sons"
[OK] "master eye" -> "master eye"
[OK] "vapors" -> "vapors"
[OK] "inventory feeders" -> "inventory feeders"
[OK] "calories comb" -> "calories comb"
[OK] "bather" -> "bather"
[OK] "appropriations equator" -> "appropriations equator"
[OK] "crank ax" -> "crank ax"
[OK] "tackle smashes" -> "tackle smashes"
[OK] "volume" -> "volume"
[OK] "yolk sharpeners" -> "yolk sharpeners"
[OK] "attempt" -> "attempt"
[OK] "men" -> "men"
[OK] "muscle" -> "muscle"
[OK] "flesh beginner" -> "flesh beginner"
[OK] "countermeasure" -> "countermeasure"
[OK] "highline" -> "highline"
[OK] "runaway" -> "runaway"
[OK] "frost airspeeds" -> "frost airspeeds"
[OK] "dangers" -> "dangers"
[OK] "amperage" -> "amperage"
[OK] "animals shoes" -> "animals shoes"
[OK] "products" -> "products"
[ERR:1] "instrumentation adverbs" -> "instrumentation adverb"
[OK] "sidewalks" -> "sidewalks"
[OK] "district" -> "district"
[OK] "cup" -> "cup"
[ERR:2] "seals" -> "leaks"
[OK] "calls classes" -> "calls classes"
[OK] "scores headset" -> "scores headset"
[OK] "stretchers" -> "stretchers"
[OK] "combinations" -> "combinations"
[OK] "recording duties" -> "recording duties"
[OK] "formations dresses" -> "formations dresses"
[ERR:9] "investment spindles" -> "implement samples"
[OK] "goods" -> "goods"
[OK] "wings" -> "wings"
[ERR:4] "economies probabilities" -> "economies pracailties"
[ERR:1] "cares" -> "cores"
[OK] "effect" -> "effect"
[OK] "straighteners" -> "straighteners"
[OK] "boxcar turbines" -> "boxcar turbines"
[OK] "frequencies honors" -> "frequencies honors"
[OK] "armor smells" -> "armor smells"
[OK] "displays enemies" -> "displays enemies"
[OK] "puddles programs" -> "puddles programs"
[ERR:5] "medals figures" -> "medals fighting"
[OK] "commands shafts" -> "commands shafts"
[OK] "multiplications raises" -> "multiplications raises"
[ERR:1] "cure jack" -> "cure lack"
[OK] "selections" -> "selections"
[OK] "prisms coordinations" -> "prisms coordinations"
[ERR:2] "rain" -> "air"
[OK] "orders" -> "orders"
[OK] "duress painters" -> "duress painters"
[OK] "areas fire" -> "areas fire"
[OK] "nerve" -> "nerve"
[OK] "gasoline bulb" -> "gasoline bulb"
[OK] "turnarounds" -> "turnarounds"
[OK] "torpedo" -> "torpedo"
[OK] "condensers disk" -> "condensers disk"
[OK] "tops throat" -> "tops throat"
[OK] "milliliters" -> "milliliters"
[OK] "jelly" -> "jelly"
[OK] "missile prerequisite" -> "missile prerequisite"
[OK] "interviewer" -> "interviewer"
[OK] "taxi" -> "taxi"
[ERR:1] "mouth calorie" -> "mouth calories"
[OK] "coupling cashiers" -> "coupling cashiers"
[OK] "suspect ring" -> "suspect ring"
[OK] "permission" -> "permission"
[OK] "compressions nickels" -> "compressions nickels"
[OK] "hardcopy" -> "hardcopy"
[OK] "basement scratchpad" -> "basement scratchpad"
[ERR:1] "listings" -> "listing"
[OK] "folder" -> "folder"
[OK] "recapitulation rap" -> "recapitulation rap"
[OK] "fathom" -> "fathom"
[ERR:4] "leaps libraries" -> "leaps babies"
[OK] "hangar mouth" -> "hangar mouth"
[OK] "jars" -> "jars"
[OK] "stone" -> "stone"
[OK] "troubleshooter" -> "troubleshooter"
[OK] "pocket" -> "pocket"
[ERR:1] "parts saving" -> "part saving"
[OK] "mornings" -> "mornings"
[OK] "thumb pain" -> "thumb pain"
[OK] "videos glows" -> "videos glows"
[OK] "commands" -> "commands"
[OK] "skirt" -> "skirt"
[OK] "inspection need" -> "inspection need"
[OK] "medicine goals" -> "medicine goals"
[OK] "danger interiors" -> "danger interiors"
[OK] "poll" -> "poll"
[OK] "roadside religion" -> "roadside religion"
[OK] "decisions" -> "decisions"
[OK] "gland surges" -> "gland surges"
[OK] "mail warnings" -> "mail warnings"
[OK] "guards" -> "guards"
[OK] "draft" -> "draft"
[OK] "shops polices" -> "shops polices"
[OK] "pieces" -> "pieces"
[OK] "attitudes rheostats" -> "attitudes rheostats"
[OK] "waist pulls" -> "waist pulls"
[OK] "auditors firmware" -> "auditors firmware"
[OK] "breach" -> "breach"
[OK] "countries hoist" -> "countries hoist"
[ERR:4] "emitter reproduction" -> "emitter deduction"
[OK] "twin" -> "twin"
[OK] "song" -> "song"
[OK] "oar" -> "oar"
[OK] "rescue" -> "rescue"
[OK] "overvoltage" -> "overvoltage"
[ERR:3] "workbooks cycles" -> "workbooks codes"
[OK] "toolbox" -> "toolbox"
[OK] "packs leap" -> "packs leap"
[ERR:1] "differences" -> "difference"
[OK] "november" -> "november"
[OK] "vision places" -> "vision places"
[OK] "traces" -> "traces"
[OK] "stowage gland" -> "stowage gland"
[ERR:2] "reenlistments managements" -> "enlistments managements"
[OK] "preventions" -> "preventions"
[OK] "vomit" -> "vomit"
[OK] "sharpeners" -> "sharpeners"
[OK] "shirts combs" -> "shirts combs"
[OK] "moments importance" -> "moments importance"
[OK] "businesses sixes" -> "businesses sixes"
[ERR:2] "forecastle effects" -> "forecastle defects"
[OK] "investigators lead" -> "investigators lead"
[OK] "deduction inclines" -> "deduction inclines"
[OK] "possibilities" -> "possibilities"
[OK] "week" -> "week"
[OK] "transfer bolt" -> "transfer bolt"
[ERR:1] "bags allowances" -> "bags allowance"
[OK] "dominion cure" -> "dominion cure"
[OK] "calibrations marines" -> "calibrations marines"
[OK] "makes" -> "makes"
[OK] "swings" -> "swings"
[OK] "hatchet" -> "hatchet"
[OK] "aliases sentences" -> "aliases sentences"
[OK] "frost" -> "frost"
[OK] "rap bushes" -> "rap bushes"
[OK] "accusations minds" -> "accusations minds"
[OK] "maintenance propose" -> "maintenance propose"
[ERR:3] "tool overloads" -> "talk overloads"
[OK] "heights" -> "heights"
[OK] "conversion saying" -> "conversion saying"
[OK] "texts update" -> "texts update"
[OK] "attitude" -> "attitude"
[OK] "coils" -> "coils"
[ERR:2] "defections recognition" -> "deductions recognition"
[OK] "ensign clay" -> "ensign clay"
[OK] "swing" -> "swing"
[OK] "request eligibility" -> "request eligibility"
[ERR:2] "casualty aims" -> "casualty air"
[OK] "donors massed" -> "donors massed"
[OK] "log presents" -> "log presents"
[ERR:2] "photos conn" -> "photos can"
[OK] "apostrophe" -> "apostrophe"
[OK] "brothers" -> "brothers"
[OK] "boots schoolroom" -> "boots schoolroom"
[OK] "conference aptitude" -> "conference aptitude"
[OK] "splashes meetings" -> "splashes meetings"
[OK] "location" -> "location"
[ERR:1] "discount skills" -> "discount sills"
[ERR:1] "junction jurisdictions" -> "junction jurisdiction"
[OK] "accountability" -> "accountability"
[OK] "cones" -> "cones"
[OK] "utilizations" -> "utilizations"
[OK] "medals catalog" -> "medals catalog"
[OK] "exposure arraignments" -> "exposure arraignments"
[OK] "government" -> "government"
[OK] "settlements" -> "settlements"
[OK] "tube" -> "tube"
[OK] "clumps" -> "clumps"
[OK] "hardcopies" -> "hardcopies"
[OK] "windings collisions" -> "windings collisions"
[OK] "switch" -> "switch"
[OK] "ticks" -> "ticks"
[OK] "integer clouds" -> "integer clouds"
[OK] "intents" -> "intents"
[OK] "tire heater" -> "tire heater"
[OK] "beam" -> "beam"
[OK] "capture" -> "capture"
[OK] "outlines" -> "outlines"
[OK] "slot preference" -> "slot preference"
[OK] "crust" -> "crust"
[OK] "pointer" -> "pointer"
[OK] "jumps glaze" -> "jumps glaze"
[OK] "hopes" -> "hopes"
[ERR:1] "beginner revolutions" -> "beginner revolution"
[OK] "spade" -> "spade"
[OK] "temper ideal" -> "temper ideal"
[OK] "stowage" -> "stowage"
[OK] "oscillation ticks" -> "oscillation ticks"
[OK] "artilleries straw" -> "artilleries straw"
[ERR:7] "dispatches reproduction" -> "dispatches rproaces"
[OK] "authorization missions" -> "authorization missions"
[OK] "buckles" -> "buckles"
[OK] "agent" -> "agent"
[OK] "poles deductions" -> "poles deductions"
[OK] "propellers" -> "propellers"
[OK] "kicks" -> "kicks"
[OK] "piston discretion" -> "piston discretion"
[OK] "hairs exchange" -> "hairs exchange"
[OK] "releases cent" -> "releases cent"
[OK] "inceptions" -> "inceptions"
[OK] "augmentations frame" -> "augmentations frame"
[OK] "boilers" -> "boilers"
[OK] "bears visitor" -> "bears visitor"
[OK] "input" -> "input"
[OK] "expiration" -> "expiration"
[OK] "sidewalk automation" -> "sidewalk automation"
[OK] "durability workloads" -> "durability workloads"
[OK] "crews" -> "crews"
[OK] "beings" -> "beings"
[OK] "try" -> "try"
[OK] "suggestion banks" -> "suggestion banks"
[OK] "departures" -> "departures"
[OK] "shadow interrelation" -> "shadow interrelation"
[OK] "tons acquittal" -> "tons acquittal"
[OK] "detentions emitters" -> "detentions emitters"
[OK] "traces orifice" -> "traces orifice"
[OK] "entrance" -> "entrance"
[ERR:2] "humor" -> "human"
[OK] "prisoners body" -> "prisoners body"
[ERR:9] "helicopter perforator" -> "helicopter arcs"
[OK] "water adviser" -> "water adviser"
[OK] "jury fumes" -> "jury fumes"
[OK] "vapors welder" -> "vapors welder"
[OK] "posts sunlight" -> "posts sunlight"
[OK] "issues" -> "issues"
[OK] "searchlight" -> "searchlight"
[OK] "table" -> "table"
[OK] "semicolon alternations" -> "semicolon alternations"
[OK] "drunk" -> "drunk"
[OK] "resistance verses" -> "resistance verses"
[OK] "leads" -> "leads"
[OK] "batches zeros" -> "batches zeros"
[OK] "observations" -> "observations"
[OK] "quotas back" -> "quotas back"
[OK] "interpreter generations" -> "interpreter generations"
[OK] "molecules" -> "molecules"
[OK] "stocking dents" -> "stocking dents"
[OK] "mixtures appellate" -> "mixtures appellate"
[OK] "worksheets" -> "worksheets"
[OK] "meeting" -> "meeting"
[OK] "photodiodes" -> "photodiodes"
[OK] "suppression berths" -> "suppression berths"
[OK] "tension" -> "tension"
[OK] "associates" -> "associates"
[OK] "certificate route" -> "certificate route"
[OK] "secretary" -> "secretary"
[OK] "spars" -> "spars"
[OK] "seasons" -> "seasons"
[OK] "permission" -> "permission"
[OK] "loss" -> "loss"
[ERR:2] "yard escape" -> "award escape"
[OK] "soldiers benefits" -> "soldiers benefits"
[OK] "structure nails" -> "structure nails"
[ERR:2] "flare bracing" -> "care bracing"
[OK] "hardcopies" -> "hardcopies"
[OK] "bars" -> "bars"
[OK] "pupil" -> "pupil"
[OK] "calculators" -> "calculators"
[OK] "focus" -> "focus"
[OK] "november shears" -> "november shears"
[OK] "exhausts" -> "exhausts"
[OK] "legging" -> "legging"
[OK] "airspeeds staples" -> "airspeeds staples"
[OK] "checkers" -> "checkers"
[OK] "approvals vacuums" -> "approvals vacuums"
[OK] "ceramics increment" -> "ceramics increment"
[OK] "magnets watchstanding" -> "magnets watchstanding"
[OK] "lumps daughters" -> "lumps daughters"
[OK] "card rhythms" -> "card rhythms"
[OK] "slice difference" -> "slice difference"
[OK] "admiralties operabilities" -> "admiralties operabilities"
[OK] "assault" -> "assault"
[OK] "aviation" -> "aviation"
[ERR:4] "tin nonavailability" -> "nonavailability"
[ERR:2] "procurement mountain" -> "procurement fountains"
[ERR:2] "stake varactors" -> "stack varactors"
[OK] "cabs" -> "cabs"
[OK] "threads" -> "threads"
[OK] "escort" -> "escort"
[ERR:2] "bow symbol" -> "body symbol"
[OK] "heel fleet" -> "heel fleet"
[OK] "algorithms" -> "algorithms"
[OK] "elections hips" -> "elections hips"
[OK] "broom partitions" -> "broom partitions"
[OK] "tuesdays" -> "tuesdays"
[OK] "illustrations" -> "illustrations"
[ERR:3] "arrays glides" -> "arrays slits"
[OK] "helms" -> "helms"
[OK] "house" -> "house"
[OK] "sill semicolons" -> "sill semicolons"
[OK] "ceiling electrolytes" -> "ceiling electrolytes"
[ERR:1] "workbook swallows" -> "workbooks swallows"
[OK] "crewmember chairwoman" -> "crewmember chairwoman"
[OK] "agent supervisor" -> "agent supervisor"
[OK] "nods months" -> "nods months"
[ERR:5] "straightener teaspoon" -> "straightener grasps"
[OK] "concepts significance" -> "concepts significance"
[ERR:2] "selection fan" -> "selection cane"
[OK] "utilities bang" -> "utilities bang"
[OK] "forest" -> "forest"
[OK] "errors ax" -> "errors ax"
[OK] "owner" -> "owner"
[OK] "allegations chocks" -> "allegations chocks"
[OK] "hopes brass" -> "hopes brass"
[OK] "holder" -> "holder"
[OK] "subject shoes" -> "subject shoes"
[OK] "varieties output" -> "varieties output"
[OK] "section" -> "section"
[OK] "accident" -> "accident"
[ERR:1] "morning honors" -> "morning honor"
[OK] "destinations" -> "destinations"
[ERR:2] "captain force" -> "captain bore"
[OK] "veteran listings" -> "veteran listings"
[OK] "dose" -> "dose"
[OK] "yards" -> "yards"
[ERR:1] "ribs breezes" -> "rib breezes"
[OK] "inception admiralties" -> "inception admiralties"
[OK] "towns milestones" -> "towns milestones"
[OK] "advertisements" -> "advertisements"
[OK] "canals schoolroom" -> "canals schoolroom"
[OK] "probe houses" -> "probe houses"
[OK] "container sunlight" -> "container sunlight"
[OK] "sidewalk" -> "sidewalk"
[ERR:1] "berth restriction" -> "berth restrictions"
[OK] "slits" -> "slits"
[OK] "qualifications" -> "qualifications"
[OK] "change" -> "change"
[ERR:1] "discriminations injections" -> "discriminations infections"
[OK] "effectiveness" -> "effectiveness"
[OK] "sentences" -> "sentences"
[OK] "odor" -> "odor"
[OK] "deck" -> "deck"
[OK] "departments" -> "departments"
[OK] "factory" -> "factory"
[OK] "chimneys destroyer" -> "chimneys destroyer"
[OK] "lift picture" -> "lift picture"
[OK] "remains" -> "remains"
[OK] "mission" -> "mission"
[OK] "paygrade basis" -> "paygrade basis"
[OK] "restrictions" -> "restrictions"
[OK] "runaway" -> "runaway"
[OK] "recognitions" -> "recognitions"
[OK] "blade limitations" -> "blade limitations"
[OK] "horn" -> "horn"
[OK] "expenditures" -> "expenditures"
[OK] "variables self" -> "variables self"
[OK] "modification" -> "modification"
[OK] "drunkeness" -> "drunkeness"
[OK] "branches dozens" -> "branches dozens"
[OK] "auto" -> "auto"
[OK] "buoys conversion" -> "buoys conversion"
[OK] "combustion" -> "combustion"
[OK] "lime" -> "lime"
[OK] "batch" -> "batch"
[OK] "swords" -> "swords"
[OK] "deserts dispatchers" -> "deserts dispatchers"
[OK] "dispatcher" -> "dispatcher"
[OK] "outfit nurse" -> "outfit nurse"
[OK] "designators" -> "designators"
[OK] "hundred" -> "hundred"
[OK] "things" -> "things"
[OK] "door" -> "door"
[ERR:2] "grass" -> "mass"
[OK] "electrolyte serials" -> "electrolyte serials"
[OK] "approach parities" -> "approach parities"
[OK] "forks friction" -> "forks friction"
[OK] "model bats" -> "model bats"
[OK] "drill" -> "drill"
[ERR:2] "fifty" -> "city"
[OK] "calculators" -> "calculators"
[OK] "quality" -> "quality"
[OK] "payment" -> "payment"
[OK] "cap" -> "cap"
[ERR:4] "freshwater chalks" -> "freshwater bases"
[OK] "hut methods" -> "hut methods"
[OK] "cab" -> "cab"
[OK] "additions knob" -> "additions knob"
[OK] "limits evacuations" -> "limits evacuations"
[OK] "skirt" -> "skirt"
[ERR:2] "bullet thousand" -> "bullethousand"
[ERR:3] "chance" -> "chanecean"
[OK] "issue" -> "issue"
[OK] "detent" -> "detent"
[OK] "arm" -> "arm"
[OK] "dolly" -> "dolly"
[OK] "trial" -> "trial"
[OK] "trim" -> "trim"
[OK] "slices passes" -> "slices passes"
[OK] "recognitions peaks" -> "recognitions peaks"
Batch: 7 / 8
Ground truth -> Recognized
[ERR:2] "trees advantages" -> "ores advantages"
[OK] "brooks" -> "brooks"
[ERR:5] "wayside guidelines" -> "wayside eguidelay"
[OK] "screen" -> "screen"
[OK] "codes" -> "codes"
[OK] "steeples" -> "steeples"
[OK] "spar" -> "spar"
[OK] "sleeves" -> "sleeves"
[OK] "mine slices" -> "mine slices"
[OK] "family knot" -> "family knot"
[OK] "laundry substitutes" -> "laundry substitutes"
[OK] "focuses" -> "focuses"
[OK] "links propose" -> "links propose"
[OK] "couples hatchet" -> "couples hatchet"
[OK] "prisms gasket" -> "prisms gasket"
[OK] "tractor lock" -> "tractor lock"
[OK] "centerline" -> "centerline"
[OK] "leader" -> "leader"
[OK] "yaws heart" -> "yaws heart"
[OK] "rollout salts" -> "rollout salts"
[OK] "equations" -> "equations"
[OK] "conveniences" -> "conveniences"
[OK] "knob mattress" -> "knob mattress"
[OK] "finishes" -> "finishes"
[ERR:1] "maneuvers" -> "maneuver"
[OK] "pit roll" -> "pit roll"
[OK] "cashiers correlation" -> "cashiers correlation"
[OK] "fracture" -> "fracture"
[OK] "seams" -> "seams"
[OK] "bit" -> "bit"
[OK] "angles" -> "angles"
[OK] "malfunction" -> "malfunction"
[OK] "algorithms" -> "algorithms"
[OK] "securities clump" -> "securities clump"
[OK] "overvoltage" -> "overvoltage"
[OK] "splices outlines" -> "splices outlines"
[OK] "suction" -> "suction"
[OK] "width" -> "width"
[OK] "submission" -> "submission"
[OK] "countries" -> "countries"
[OK] "garages tilling" -> "garages tilling"
[ERR:1] "thought schematics" -> "thoughts schematics"
[OK] "bites" -> "bites"
[ERR:2] "spans twirl" -> "spans twig"
[OK] "trains" -> "trains"
[OK] "steam pockets" -> "steam pockets"
[OK] "calibration" -> "calibration"
[OK] "filters" -> "filters"
[OK] "regulations" -> "regulations"
[OK] "peck" -> "peck"
[OK] "orders plans" -> "orders plans"
[OK] "analogs bubble" -> "analogs bubble"
[OK] "jugs record" -> "jugs record"
[OK] "voltage" -> "voltage"
[OK] "lightning neutron" -> "lightning neutron"
[ERR:3] "cams" -> "arm"
[ERR:2] "attesting force" -> "attesting fork"
[OK] "cosals sheets" -> "cosals sheets"
[OK] "commanders" -> "commanders"
[OK] "swing investments" -> "swing investments"
[ERR:3] "offset apostrophe" -> "offer apostrophes"
[OK] "improvements" -> "improvements"
[OK] "experiences" -> "experiences"
[OK] "liver pick" -> "liver pick"
[OK] "slap annexs" -> "slap annexs"
[OK] "basket" -> "basket"
[ERR:2] "subprogram parcel" -> "subprogram pace"
[OK] "behaviors pilot" -> "behaviors pilot"
[OK] "worry" -> "worry"
[OK] "minuses dives" -> "minuses dives"
[OK] "color printouts" -> "color printouts"
[ERR:1] "conjunctions painter" -> "conjunctions painters"
[OK] "suction" -> "suction"
[OK] "sirs" -> "sirs"
[OK] "forecastle diesel" -> "forecastle diesel"
[OK] "recognitions" -> "recognitions"
[OK] "counsels" -> "counsels"
[OK] "rag impulses" -> "rag impulses"
[OK] "evaluations" -> "evaluations"
[ERR:3] "calibrations environments" -> "calibrations eavionmens"
[OK] "intensity" -> "intensity"
[OK] "firings guide" -> "firings guide"
[OK] "rescuer hyphen" -> "rescuer hyphen"
[OK] "rifling journey" -> "rifling journey"
[OK] "examinations flaps" -> "examinations flaps"
[OK] "bed commas" -> "bed commas"
[OK] "trust members" -> "trust members"
[OK] "affiants" -> "affiants"
[OK] "printout dive" -> "printout dive"
[OK] "assembly menus" -> "assembly menus"
[OK] "march alloy" -> "march alloy"
[OK] "action ray" -> "action ray"
[OK] "stair" -> "stair"
[OK] "tops work" -> "tops work"
[OK] "drill" -> "drill"
[OK] "chapter intakes" -> "chapter intakes"
[OK] "decisions" -> "decisions"
[ERR:8] "dependencies plexiglass" -> "dependencies peck"
[OK] "compliances" -> "compliances"
[OK] "tacks" -> "tacks"
[OK] "places breath" -> "places breath"
[OK] "sentence" -> "sentence"
[OK] "clericals" -> "clericals"
[OK] "deal" -> "deal"
[OK] "arc" -> "arc"
[OK] "gulfs matters" -> "gulfs matters"
[OK] "injectors" -> "injectors"
[OK] "allotment" -> "allotment"
[OK] "strikers horizon" -> "strikers horizon"
[OK] "cords" -> "cords"
[OK] "preliminaries division" -> "preliminaries division"
[ERR:4] "spacer movements" -> "spacer movers"
[OK] "thunder junk" -> "thunder junk"
[OK] "executions alcohol" -> "executions alcohol"
[OK] "carburetor" -> "carburetor"
[ERR:1] "counsels addressees" -> "counsels addresses"
[OK] "seams" -> "seams"
[OK] "much" -> "much"
[OK] "runs receiver" -> "runs receiver"
[OK] "alternate ditto" -> "alternate ditto"
[OK] "hitch" -> "hitch"
[ERR:4] "symbol routes" -> "bomb routes"
[OK] "gases goal" -> "gases goal"
[OK] "fighter embosses" -> "fighter embosses"
[OK] "americans islands" -> "americans islands"
[OK] "complaints equipment" -> "complaints equipment"
[OK] "residue" -> "residue"
[OK] "component" -> "component"
[ERR:1] "shot elapses" -> "shoe elapses"
[ERR:2] "writing knock" -> "writing knot"
[OK] "flicker" -> "flicker"
[OK] "warehouses" -> "warehouses"
[OK] "airport" -> "airport"
[OK] "specialist" -> "specialist"
[OK] "wardrooms" -> "wardrooms"
[OK] "worksheet" -> "worksheet"
[OK] "injection" -> "injection"
[ERR:3] "topping" -> "damping"
[OK] "dares" -> "dares"
[OK] "references bytes" -> "references bytes"
[OK] "talk" -> "talk"
[ERR:1] "top" -> "ton"
[OK] "alternation web" -> "alternation web"
[OK] "poll" -> "poll"
[OK] "cheeks" -> "cheeks"
[OK] "theories" -> "theories"
[OK] "counts projectiles" -> "counts projectiles"
[OK] "respects" -> "respects"
[ERR:3] "closure echoes" -> "closure choke"
[OK] "leather" -> "leather"
[OK] "can impedance" -> "can impedance"
[OK] "marbles fastener" -> "marbles fastener"
[OK] "silk films" -> "silk films"
[OK] "forehead" -> "forehead"
[ERR:5] "checkpoints sirs" -> "checkpoints"
[OK] "tissue" -> "tissue"
[OK] "pints beginners" -> "pints beginners"
[OK] "matter watt" -> "matter watt"
[OK] "runaways" -> "runaways"
[OK] "liquors" -> "liquors"
[OK] "option" -> "option"
[OK] "rotation restraints" -> "rotation restraints"
[OK] "heats possibility" -> "heats possibility"
[OK] "atmosphere moistures" -> "atmosphere moistures"
[OK] "river altimeter" -> "river altimeter"
[OK] "ranks" -> "ranks"
[OK] "compartments" -> "compartments"
[OK] "society" -> "society"
[ERR:4] "implementation weld" -> "implementation care"
[OK] "sweepers steam" -> "sweepers steam"
[OK] "mode" -> "mode"
[OK] "barometer" -> "barometer"
[OK] "bowls fronts" -> "bowls fronts"
[OK] "compromise" -> "compromise"
[OK] "navigators" -> "navigators"
[OK] "fastener" -> "fastener"
[OK] "breaks try" -> "breaks try"
[OK] "airplane radiator" -> "airplane radiator"
[OK] "depletion mists" -> "depletion mists"
[OK] "slices waterline" -> "slices waterline"
[OK] "structures grade" -> "structures grade"
[OK] "hub" -> "hub"
[OK] "guilt" -> "guilt"
[OK] "firer tab" -> "firer tab"
[OK] "swimmers" -> "swimmers"
[OK] "prefix rowers" -> "prefix rowers"
[OK] "quarters" -> "quarters"
[OK] "washer alarm" -> "washer alarm"
[OK] "forty net" -> "forty net"
[OK] "october commissions" -> "october commissions"
[OK] "shock lift" -> "shock lift"
[OK] "wood photographs" -> "wood photographs"
[OK] "disadvantage bulk" -> "disadvantage bulk"
[OK] "winch butts" -> "winch butts"
[OK] "committees" -> "committees"
[OK] "sessions time" -> "sessions time"
[OK] "direction" -> "direction"
[OK] "illustrations conjecture" -> "illustrations conjecture"
[ERR:3] "additions gyro" -> "additions crop"
[OK] "stub" -> "stub"
[ERR:6] "sponsor" -> "cearnmr"
[OK] "fits shovel" -> "fits shovel"
[OK] "tanks harmony" -> "tanks harmony"
[OK] "fumes" -> "fumes"
[OK] "thought" -> "thought"
[OK] "nation" -> "nation"
[OK] "packs" -> "packs"
[ERR:1] "chatter disability" -> "chapter disability"
[OK] "conversion" -> "conversion"
[OK] "arrivals thumb" -> "arrivals thumb"
[OK] "developments modification" -> "developments modification"
[OK] "representatives" -> "representatives"
[OK] "quiet" -> "quiet"
[OK] "secretary" -> "secretary"
[OK] "chattels curtain" -> "chattels curtain"
[OK] "honors" -> "honors"
[ERR:2] "legging subfunctions" -> "leaving subfunctions"
[ERR:2] "multimeter loudspeaker" -> "altimeter loudspeaker"
[ERR:1] "airs" -> "air"
[OK] "bushes square" -> "bushes square"
[OK] "terrain toss" -> "terrain toss"
[ERR:3] "makeup drainage" -> "makeup drain"
[OK] "cuts" -> "cuts"
[OK] "boil" -> "boil"
[ERR:2] "mess" -> "men"
[ERR:5] "extension purge" -> "extension owner"
[OK] "space" -> "space"
[OK] "million lock" -> "million lock"
[OK] "resistors" -> "resistors"
[OK] "catalogs" -> "catalogs"
[OK] "stern inceptions" -> "stern inceptions"
[OK] "alignments groves" -> "alignments groves"
[OK] "discounts barometer" -> "discounts barometer"
[OK] "azimuth orifices" -> "azimuth orifices"
[OK] "shocks" -> "shocks"
[ERR:3] "resource terminologies" -> "resource terminology"
[OK] "raps" -> "raps"
[OK] "printouts dozens" -> "printouts dozens"
[OK] "status" -> "status"
[ERR:5] "curtain beams" -> "curtain crust"
[OK] "schoolrooms elapse" -> "schoolrooms elapse"
[OK] "tomorrow rejections" -> "tomorrow rejections"
[OK] "composition" -> "composition"
[OK] "helicopters" -> "helicopters"
[OK] "summers dioxides" -> "summers dioxides"
[OK] "cleats" -> "cleats"
[OK] "yard" -> "yard"
[OK] "bell artillery" -> "bell artillery"
[OK] "capitals cork" -> "capitals cork"
[OK] "combatants disgust" -> "combatants disgust"
[OK] "positions neutrons" -> "positions neutrons"
[OK] "clocks strip" -> "clocks strip"
[ERR:8] "highline ride" -> "uqiune file"
[OK] "box" -> "box"
[OK] "poison trays" -> "poison trays"
[OK] "conversion" -> "conversion"
[OK] "fuel alert" -> "fuel alert"
[OK] "cough races" -> "cough races"
[OK] "notices turns" -> "notices turns"
[OK] "education" -> "education"
[ERR:1] "webs" -> "web"
[ERR:3] "noises personnel" -> "noises person"
[OK] "fifteen adhesives" -> "fifteen adhesives"
[OK] "fountains" -> "fountains"
[OK] "worry" -> "worry"
[OK] "authorization" -> "authorization"
[OK] "decoder" -> "decoder"
[OK] "dress displays" -> "dress displays"
[OK] "subprogram" -> "subprogram"
[OK] "points" -> "points"
[OK] "ease" -> "ease"
[OK] "overload" -> "overload"
[ERR:2] "alternate coast" -> "alternate coats"
[OK] "event" -> "event"
[OK] "twig" -> "twig"
[OK] "carriage" -> "carriage"
[ERR:5] "hump lookout" -> "hump lake"
[OK] "chapters warranties" -> "chapters warranties"
[OK] "fall attesting" -> "fall attesting"
[OK] "lamp" -> "lamp"
[OK] "teeth" -> "teeth"
[OK] "selectors" -> "selectors"
[OK] "radars" -> "radars"
[OK] "procedures" -> "procedures"
[OK] "maintainability" -> "maintainability"
[OK] "sixes tunnel" -> "sixes tunnel"
[OK] "minuses villages" -> "minuses villages"
[OK] "dress" -> "dress"
[OK] "arrest" -> "arrest"
[OK] "horn strip" -> "horn strip"
[OK] "tumble section" -> "tumble section"
[OK] "ball broom" -> "ball broom"
[OK] "thickness cranks" -> "thickness cranks"
[ERR:4] "decoration pens" -> "decoration ax"
[OK] "currencies delegates" -> "currencies delegates"
[OK] "justice" -> "justice"
[OK] "scabs" -> "scabs"
[OK] "buys nickels" -> "buys nickels"
[ERR:7] "width learning" -> "winthig being"
[OK] "applications document" -> "applications document"
[OK] "pans" -> "pans"
[OK] "rotation remains" -> "rotation remains"
[OK] "trip" -> "trip"
[OK] "mailboxes" -> "mailboxes"
[OK] "mercury" -> "mercury"
[OK] "quiet" -> "quiet"
[OK] "tunnels boilers" -> "tunnels boilers"
[OK] "dissemination diameters" -> "dissemination diameters"
[OK] "mint destroyer" -> "mint destroyer"
[OK] "researchers" -> "researchers"
[ERR:5] "bulkhead carbons" -> "bulkhead area"
[OK] "minute commands" -> "minute commands"
[OK] "octobers identification" -> "octobers identification"
[OK] "sponges motions" -> "sponges motions"
[OK] "emergency pile" -> "emergency pile"
[OK] "alloys" -> "alloys"
[OK] "barrel location" -> "barrel location"
[OK] "strain antenna" -> "strain antenna"
[OK] "technique additive" -> "technique additive"
[OK] "gunfire groan" -> "gunfire groan"
[ERR:2] "dam" -> "can"
[OK] "swaps curve" -> "swaps curve"
[OK] "libraries toothpick" -> "libraries toothpick"
[OK] "sock" -> "sock"
[OK] "sole perforations" -> "sole perforations"
[OK] "math" -> "math"
[ERR:2] "splitter uniforms" -> "splicer uniforms"
[OK] "pressures header" -> "pressures header"
[OK] "love" -> "love"
[OK] "concurrence" -> "concurrence"
[ERR:4] "theories pitch" -> "theories liters"
[OK] "return" -> "return"
[OK] "boresight disabilities" -> "boresight disabilities"
[ERR:4] "clerks helmsmen" -> "clerks helm"
[OK] "glass" -> "glass"
[OK] "cruise spoke" -> "cruise spoke"
[OK] "station contributions" -> "station contributions"
[OK] "attack" -> "attack"
[OK] "cheeses" -> "cheeses"
[ERR:1] "type beads" -> "typebeads"
[OK] "corrections" -> "corrections"
[OK] "pair" -> "pair"
[OK] "departures" -> "departures"
[OK] "furs" -> "furs"
[OK] "drillers operators" -> "drillers operators"
[OK] "expiration" -> "expiration"
[OK] "sports muscle" -> "sports muscle"
[OK] "ocean toothpick" -> "ocean toothpick"
[OK] "liquors" -> "liquors"
[OK] "compressions" -> "compressions"
[OK] "art" -> "art"
[OK] "arrests" -> "arrests"
[OK] "servo" -> "servo"
[OK] "vicinity hours" -> "vicinity hours"
[OK] "return" -> "return"
[OK] "labors" -> "labors"
[OK] "grains" -> "grains"
[OK] "friends" -> "friends"
[OK] "runners" -> "runners"
[OK] "combinations lump" -> "combinations lump"
[OK] "asterisks" -> "asterisks"
[ERR:2] "chairwomen boosts" -> "chairwomen boats"
[OK] "lights stencil" -> "lights stencil"
[OK] "fuses conn" -> "fuses conn"
[OK] "armful" -> "armful"
[OK] "latitudes" -> "latitudes"
[OK] "aggravations toothpick" -> "aggravations toothpick"
[OK] "interruption conjectures" -> "interruption conjectures"
[ERR:1] "designations" -> "designation"
[OK] "tunnels flash" -> "tunnels flash"
[OK] "wing subtotals" -> "wing subtotals"
[ERR:3] "buzz" -> "bag"
[OK] "sixties twirls" -> "sixties twirls"
[OK] "engines" -> "engines"
[OK] "series apportionments" -> "series apportionments"
[OK] "permit" -> "permit"
[OK] "elements" -> "elements"
[OK] "safeguard" -> "safeguard"
[OK] "buoy nerves" -> "buoy nerves"
[OK] "yaw cap" -> "yaw cap"
[OK] "teaspoons" -> "teaspoons"
[OK] "seamanship" -> "seamanship"
[OK] "leave" -> "leave"
[OK] "gang sweeper" -> "gang sweeper"
[OK] "washtub" -> "washtub"
[OK] "firearm" -> "firearm"
[OK] "messages" -> "messages"
[OK] "demonstrations bows" -> "demonstrations bows"
[OK] "things rinses" -> "things rinses"
[OK] "airports facepieces" -> "airports facepieces"
[OK] "readers" -> "readers"
[OK] "ton tailor" -> "ton tailor"
[OK] "libraries" -> "libraries"
[OK] "variety activities" -> "variety activities"
[OK] "aluminums" -> "aluminums"
[OK] "tests yaw" -> "tests yaw"
[OK] "wrap nuts" -> "wrap nuts"
[ERR:1] "platforms" -> "platform"
[OK] "comparison" -> "comparison"
[ERR:5] "swab hug" -> "swab flame"
[OK] "cloths" -> "cloths"
[OK] "registers lee" -> "registers lee"
[OK] "explosion watts" -> "explosion watts"
[ERR:4] "object glows" -> "act glows"
[OK] "meter" -> "meter"
[OK] "privileges hospital" -> "privileges hospital"
[OK] "briefing" -> "briefing"
[OK] "bat" -> "bat"
[OK] "analyses" -> "analyses"
[OK] "interference detents" -> "interference detents"
[OK] "ivory experiences" -> "ivory experiences"
[ERR:2] "laundry bolts" -> "laundry blots"
[OK] "load software" -> "load software"
[OK] "transmission component" -> "transmission component"
[OK] "personalities recruit" -> "personalities recruit"
[OK] "lints threaders" -> "lints threaders"
[OK] "waists highways" -> "waists highways"
[ERR:2] "human pot" -> "hum pot"
[OK] "electrode processors" -> "electrode processors"
[OK] "audits" -> "audits"
[OK] "leap business" -> "leap business"
[OK] "quarters connection" -> "quarters connection"
[OK] "couples" -> "couples"
[OK] "energy" -> "energy"
[OK] "antenna" -> "antenna"
[OK] "daughter grooves" -> "daughter grooves"
[OK] "caliber" -> "caliber"
[OK] "ounces barometer" -> "ounces barometer"
[OK] "yaws" -> "yaws"
[OK] "soils storage" -> "soils storage"
[ERR:1] "clearances" -> "clearance"
[ERR:3] "personalities impact" -> "personalities ipatcts"
[OK] "methodology" -> "methodology"
[OK] "torque smell" -> "torque smell"
[OK] "drainer deck" -> "drainer deck"
[OK] "wave" -> "wave"
[OK] "times" -> "times"
[OK] "needle cathode" -> "needle cathode"
[ERR:4] "guesses growths" -> "guesses glow"
[ERR:2] "sailor fork" -> "sailor fog"
[ERR:3] "substance residues" -> "substance rides"
[ERR:2] "governors coast" -> "governors coal"
[OK] "complaint desk" -> "complaint desk"
[OK] "orange" -> "orange"
[OK] "accusations" -> "accusations"
[OK] "racks" -> "racks"
[OK] "law sons" -> "law sons"
[OK] "mistrial rim" -> "mistrial rim"
[OK] "ray field" -> "ray field"
[OK] "wire revision" -> "wire revision"
[OK] "males" -> "males"
[OK] "automobile" -> "automobile"
[OK] "beads gleams" -> "beads gleams"
[ERR:1] "comforts" -> "comfort"
[OK] "gum" -> "gum"
[OK] "failures notation" -> "failures notation"
[OK] "arrest" -> "arrest"
[ERR:2] "rose benches" -> "rose bench"
[OK] "accruals" -> "accruals"
[OK] "apparatus slots" -> "apparatus slots"
[OK] "recoveries" -> "recoveries"
[OK] "manuals satellite" -> "manuals satellite"
[OK] "elections" -> "elections"
[OK] "trails" -> "trails"
[OK] "legends exhaust" -> "legends exhaust"
[OK] "pits" -> "pits"
[OK] "rumble slap" -> "rumble slap"
[OK] "apples future" -> "apples future"
[OK] "waters horizon" -> "waters horizon"
[ERR:8] "techniques preservation" -> "techniques eraser"
[OK] "arrays" -> "arrays"
[OK] "movers combustion" -> "movers combustion"
[OK] "fake dish" -> "fake dish"
[OK] "flag" -> "flag"
[OK] "refrigerator" -> "refrigerator"
[OK] "males poles" -> "males poles"
[OK] "mines" -> "mines"
[OK] "fractures" -> "fractures"
[OK] "authorizations bandage" -> "authorizations bandage"
[OK] "types eleven" -> "types eleven"
[OK] "illustrations" -> "illustrations"
[OK] "adverbs ohms" -> "adverbs ohms"
[OK] "language drums" -> "language drums"
[OK] "hill score" -> "hill score"
[OK] "investments" -> "investments"
[OK] "parachutes maximum" -> "parachutes maximum"
[OK] "hiss" -> "hiss"
[OK] "sale donors" -> "sale donors"
[OK] "classroom" -> "classroom"
[OK] "dare sparks" -> "dare sparks"
[OK] "substitutes cloth" -> "substitutes cloth"
[OK] "account intakes" -> "account intakes"
[OK] "periods puncture" -> "periods puncture"
[OK] "scopes" -> "scopes"
[OK] "trims tabs" -> "trims tabs"
[OK] "pointer births" -> "pointer births"
[OK] "boxes stomach" -> "boxes stomach"
[OK] "labor" -> "labor"
[OK] "stamps" -> "stamps"
[OK] "butt generals" -> "butt generals"
Batch: 8 / 8
Ground truth -> Recognized
[OK] "world" -> "world"
[OK] "cars" -> "cars"
[OK] "interiors" -> "interiors"
[OK] "vapor" -> "vapor"
[OK] "decontamination" -> "decontamination"
[OK] "hauls tops" -> "hauls tops"
[OK] "directories eleven" -> "directories eleven"
[OK] "abettor dictionary" -> "abettor dictionary"
[OK] "kills thickness" -> "kills thickness"
[OK] "leaper" -> "leaper"
[OK] "ribbons" -> "ribbons"
[OK] "affair setup" -> "affair setup"
[OK] "beams" -> "beams"
[OK] "compilers" -> "compilers"
[OK] "slashes payment" -> "slashes payment"
[ERR:4] "tabulation electrician" -> "tabulation ectrcicn"
[OK] "polarities" -> "polarities"
[OK] "implement" -> "implement"
[ERR:5] "tourniquet closure" -> "tourniquet chests"
[OK] "wear" -> "wear"
[OK] "lieutenants" -> "lieutenants"
[ERR:8] "emergency" -> "gomrorer"
[OK] "sectors judges" -> "sectors judges"
[ERR:3] "economy recruiters" -> "economy recruit"
[OK] "leakage" -> "leakage"
[OK] "flags" -> "flags"
[OK] "amounts silence" -> "amounts silence"
[ERR:3] "sewage establishment" -> "sevadr establishment"
[OK] "impact" -> "impact"
[OK] "sweeps" -> "sweeps"
[ERR:2] "oak compensations" -> "dock compensations"
[OK] "squares" -> "squares"
[OK] "sun shortages" -> "sun shortages"
[ERR:3] "inquiry" -> "ircwiry"
[OK] "console blot" -> "console blot"
[ERR:1] "drawer restaurants" -> "drawer restaurant"
[OK] "cans" -> "cans"
[OK] "discovery lane" -> "discovery lane"
[OK] "polarities interest" -> "polarities interest"
[OK] "pencils painting" -> "pencils painting"
[OK] "barge search" -> "barge search"
[OK] "thursday emitters" -> "thursday emitters"
[ERR:5] "projects bulkheads" -> "projects bulk"
[OK] "swim" -> "swim"
[OK] "difference" -> "difference"
[OK] "dimension jumpers" -> "dimension jumpers"
[OK] "community dye" -> "community dye"
[OK] "resistor gravity" -> "resistor gravity"
[OK] "deal" -> "deal"
[OK] "hums" -> "hums"
[OK] "chemical" -> "chemical"
[OK] "freights compressions" -> "freights compressions"
[OK] "pond" -> "pond"
[OK] "eighties" -> "eighties"
[OK] "headset" -> "headset"
[OK] "recruits" -> "recruits"
[OK] "war" -> "war"
[OK] "marks mount" -> "marks mount"
[OK] "bails cosals" -> "bails cosals"
[OK] "governments" -> "governments"
[ERR:2] "boat tin" -> "boat ring"
[OK] "woman" -> "woman"
[ERR:4] "restaurants henrys" -> "restaurants hair"
[OK] "run" -> "run"
[OK] "fall knock" -> "fall knock"
[OK] "fifteen misalinement" -> "fifteen misalinement"
[OK] "rides" -> "rides"
[OK] "shield cavities" -> "shield cavities"
[OK] "requests twist" -> "requests twist"
[OK] "blades races" -> "blades races"
[OK] "appraisals" -> "appraisals"
[ERR:3] "manpower durability" -> "manpower ability"
[OK] "turbines prices" -> "turbines prices"
[OK] "glue" -> "glue"
[OK] "share" -> "share"
[OK] "progress nurses" -> "progress nurses"
[OK] "freights" -> "freights"
[OK] "thumb" -> "thumb"
[OK] "protection button" -> "protection button"
[OK] "cost" -> "cost"
[OK] "things" -> "things"
[OK] "master" -> "master"
[OK] "conspiracies" -> "conspiracies"
[OK] "analyzers" -> "analyzers"
[OK] "sidewalks qualifiers" -> "sidewalks qualifiers"
[ERR:1] "link commendation" -> "link commendations"
[OK] "mule legend" -> "mule legend"
[OK] "specialty airspeed" -> "specialty airspeed"
[OK] "departures ability" -> "departures ability"
[OK] "mustard" -> "mustard"
[OK] "web" -> "web"
[OK] "solids" -> "solids"
[OK] "rank dabs" -> "rank dabs"
[OK] "escape channel" -> "escape channel"
[OK] "chase" -> "chase"
[OK] "rushes" -> "rushes"
[OK] "sirs" -> "sirs"
[OK] "fixture leak" -> "fixture leak"
[OK] "bomb qualifiers" -> "bomb qualifiers"
[OK] "segments" -> "segments"
[OK] "mercury" -> "mercury"
[OK] "bears milks" -> "bears milks"
[OK] "specification" -> "specification"
[OK] "birth wool" -> "birth wool"
[ERR:5] "harnesses admiral" -> "harnesses aim"
[ERR:1] "harpoons downgrades" -> "harpoons downgrade"
[OK] "waterline deposition" -> "waterline deposition"
[OK] "mate" -> "mate"
[ERR:5] "flesh memorandum" -> "flesh memory"
[ERR:4] "parity tricks" -> "nail tricks"
[OK] "facts" -> "facts"
[OK] "scores" -> "scores"
[OK] "truths" -> "truths"
[OK] "discard puddle" -> "discard puddle"
[ERR:2] "quarter catches" -> "quarter catch"
[OK] "extras" -> "extras"
[OK] "pick coxswain" -> "pick coxswain"
[OK] "rejection" -> "rejection"
[OK] "steeple" -> "steeple"
[OK] "catch" -> "catch"
[OK] "reservoirs" -> "reservoirs"
[OK] "blueprints organs" -> "blueprints organs"
[OK] "memory" -> "memory"
[OK] "capacitances" -> "capacitances"
[OK] "fact" -> "fact"
[OK] "emergencies" -> "emergencies"
[OK] "letterheads" -> "letterheads"
[OK] "stage" -> "stage"
[OK] "menus" -> "menus"
[OK] "painters" -> "painters"
[OK] "specialty spans" -> "specialty spans"
[OK] "arrival" -> "arrival"
[OK] "debts adjectives" -> "debts adjectives"
[OK] "divider shirt" -> "divider shirt"
[OK] "readiness" -> "readiness"
[OK] "couples frequencies" -> "couples frequencies"
[OK] "floor" -> "floor"
[OK] "screams" -> "screams"
[ERR:1] "fleet admission" -> "feet admission"
[OK] "liver pines" -> "liver pines"
[OK] "seams" -> "seams"
[OK] "cracks quality" -> "cracks quality"
[OK] "oscillation" -> "oscillation"
[OK] "lump" -> "lump"
[OK] "arrow" -> "arrow"
[OK] "streets tender" -> "streets tender"
[OK] "disassembly schedulers" -> "disassembly schedulers"
[OK] "litre fight" -> "litre fight"
[OK] "years" -> "years"
[OK] "ambiguity" -> "ambiguity"
[OK] "theory bags" -> "theory bags"
[OK] "ticks" -> "ticks"
[OK] "selections" -> "selections"
[OK] "subtask" -> "subtask"
[OK] "nets rocket" -> "nets rocket"
[OK] "coordinate" -> "coordinate"
[ERR:4] "raise alternations" -> "raise alternate"
[OK] "value" -> "value"
[OK] "injectors firer" -> "injectors firer"
[OK] "inventory" -> "inventory"
[OK] "slashes" -> "slashes"
[OK] "nerves" -> "nerves"
[OK] "industries" -> "industries"
[ERR:3] "initiator diagnoses" -> "indicator diagnoses"
[OK] "splicers" -> "splicers"
[ERR:5] "veteran increase" -> "veteraincrek"
[OK] "price" -> "price"
[OK] "points" -> "points"
[OK] "resources" -> "resources"
[ERR:5] "reproductions cube" -> "reproductions"
[ERR:1] "dock boosts" -> "dock boost"
[OK] "apprehensions lenders" -> "apprehensions lenders"
[OK] "badges" -> "badges"
[OK] "custodian" -> "custodian"
[ERR:4] "commission torques" -> "commission focuses"
[OK] "silences" -> "silences"
[OK] "pilots tabulations" -> "pilots tabulations"
[OK] "organ" -> "organ"
[OK] "affiants medium" -> "affiants medium"
[OK] "precaution" -> "precaution"
[OK] "hilltops designations" -> "hilltops designations"
[OK] "ratios" -> "ratios"
[OK] "arraignment" -> "arraignment"
[OK] "twins shoe" -> "twins shoe"
[OK] "ponds" -> "ponds"
[OK] "log taxis" -> "log taxis"
[ERR:3] "explanations battleship" -> "explanations battles"
[OK] "modem parts" -> "modem parts"
[OK] "piston limit" -> "piston limit"
[OK] "slope meets" -> "slope meets"
[OK] "diary agents" -> "diary agents"
[OK] "sole" -> "sole"
[OK] "lace" -> "lace"
[OK] "economy failure" -> "economy failure"
[ERR:2] "lapse opportunities" -> "cape opportunities"
[OK] "gyros keels" -> "gyros keels"
[OK] "bell silence" -> "bell silence"
[OK] "washtub realignments" -> "washtub realignments"
[OK] "yolks hilltops" -> "yolks hilltops"
[OK] "blower" -> "blower"
[OK] "codes" -> "codes"
[OK] "hazards" -> "hazards"
[OK] "bell tabulations" -> "bell tabulations"
[OK] "births fillers" -> "births fillers"
[OK] "bat" -> "bat"
[OK] "articles conducts" -> "articles conducts"
[OK] "millimeter" -> "millimeter"
[OK] "implements" -> "implements"
[OK] "note" -> "note"
[OK] "liter" -> "liter"
[OK] "compilers" -> "compilers"
[OK] "orifice metal" -> "orifice metal"
[OK] "average" -> "average"
[OK] "welder pressure" -> "welder pressure"
[OK] "sleep" -> "sleep"
[OK] "bang" -> "bang"
[OK] "churns" -> "churns"
[OK] "panels" -> "panels"
[OK] "wagons" -> "wagons"
[OK] "odors" -> "odors"
[OK] "possessions" -> "possessions"
[OK] "holddown chests" -> "holddown chests"
[OK] "wafer miss" -> "wafer miss"
[OK] "profit priority" -> "profit priority"
[OK] "want" -> "want"
[OK] "electron" -> "electron"
[OK] "trailer" -> "trailer"
[OK] "perforator" -> "perforator"
[OK] "arraignments controls" -> "arraignments controls"
[OK] "partition grasses" -> "partition grasses"
[OK] "abuser thanks" -> "abuser thanks"
[OK] "stake" -> "stake"
[OK] "claims" -> "claims"
[OK] "pint holddown" -> "pint holddown"
[OK] "models" -> "models"
[OK] "worlds" -> "worlds"
[OK] "silk" -> "silk"
[ERR:1] "alcohols crust" -> "alcohol crust"
[OK] "mess impulses" -> "mess impulses"
[OK] "option" -> "option"
[OK] "fetch prime" -> "fetch prime"
[OK] "energizer" -> "energizer"
[OK] "texts dockings" -> "texts dockings"
[OK] "drug" -> "drug"
[OK] "dress" -> "dress"
[OK] "profile" -> "profile"
[OK] "invention string" -> "invention string"
[OK] "damage serial" -> "damage serial"
[OK] "ponds" -> "ponds"
[OK] "threader freeze" -> "threader freeze"
[OK] "monitor" -> "monitor"
[OK] "scratches compasses" -> "scratches compasses"
[OK] "morning" -> "morning"
[OK] "peacetime dependencies" -> "peacetime dependencies"
[OK] "respects" -> "respects"
[ERR:3] "doors" -> "fogs"
[OK] "daughters cord" -> "daughters cord"
[OK] "troubles" -> "troubles"
[OK] "wastes" -> "wastes"
[OK] "wood" -> "wood"
[ERR:4] "writer license" -> "writer cents"
[ERR:2] "difficulties roar" -> "difficulties bar"
[OK] "assignment" -> "assignment"
[ERR:10] "keyboard linkages" -> "labor dinsnet"
[ERR:2] "principal" -> "principle"
[OK] "magnets" -> "magnets"
[OK] "amplifier" -> "amplifier"
[OK] "sterilizers" -> "sterilizers"
[OK] "terminals military" -> "terminals military"
[OK] "thimbles" -> "thimbles"
[OK] "container polishers" -> "container polishers"
[OK] "chain" -> "chain"
[OK] "policy" -> "policy"
[OK] "commas originals" -> "commas originals"
[OK] "key prevention" -> "key prevention"
[OK] "inventories" -> "inventories"
[OK] "researcher houses" -> "researcher houses"
[OK] "profile electron" -> "profile electron"
[OK] "cavity basis" -> "cavity basis"
[OK] "differences button" -> "differences button"
[OK] "haul" -> "haul"
[OK] "margins athwartship" -> "margins athwartship"
[OK] "decoder decrements" -> "decoder decrements"
[OK] "margins towel" -> "margins towel"
[OK] "nerve" -> "nerve"
[OK] "masks cap" -> "masks cap"
[OK] "arches" -> "arches"
[OK] "raps" -> "raps"
[OK] "carpet" -> "carpet"
[ERR:2] "rehabilitation pain" -> "rehabilitation pairs"
[ERR:2] "cores roar" -> "coders roar"
[OK] "retractors forty" -> "retractors forty"
[OK] "cheek" -> "cheek"
[OK] "spoke" -> "spoke"
[OK] "ampere" -> "ampere"
[OK] "gleams" -> "gleams"
[OK] "move dot" -> "move dot"
[OK] "efforts solvents" -> "efforts solvents"
[OK] "fives" -> "fives"
[OK] "bundle" -> "bundle"
[OK] "riding" -> "riding"
[OK] "mailbox intercom" -> "mailbox intercom"
[OK] "steels" -> "steels"
[OK] "hate" -> "hate"
[OK] "bread shave" -> "bread shave"
[OK] "film mechanic" -> "film mechanic"
[OK] "graph" -> "graph"
[OK] "nickel nose" -> "nickel nose"
[OK] "facepiece" -> "facepiece"
[ERR:1] "nerve" -> "nerves"
[OK] "phases whisper" -> "phases whisper"
[OK] "affiants" -> "affiants"
[OK] "jeopardy halyards" -> "jeopardy halyards"
[OK] "function heels" -> "function heels"
[OK] "pile" -> "pile"
[ERR:2] "modification crowds" -> "modification crews"
[ERR:1] "swimmer widths" -> "swimmer width"
[OK] "laundries route" -> "laundries route"
[OK] "gage carloads" -> "gage carloads"
[OK] "insanities" -> "insanities"
[ERR:4] "decoder odds" -> "decoders arts"
[OK] "alternations" -> "alternations"
[OK] "powders fists" -> "powders fists"
[OK] "course" -> "course"
[OK] "injuries" -> "injuries"
[OK] "oscillators sums" -> "oscillators sums"
[ERR:5] "photographs fetches" -> "photographs factors"
[OK] "brother" -> "brother"
[OK] "amounts stripes" -> "amounts stripes"
[OK] "hickories turns" -> "hickories turns"
[OK] "register" -> "register"
[OK] "worm sockets" -> "worm sockets"
[OK] "blanks" -> "blanks"
[OK] "defect" -> "defect"
[OK] "counsel" -> "counsel"
[OK] "march" -> "march"
[OK] "teeth bags" -> "teeth bags"
[ERR:3] "hillside alarms" -> "hills alarms"
[ERR:4] "discussions airspeed" -> "discussions arspeaces"
[OK] "rains" -> "rains"
[OK] "maps syntax" -> "maps syntax"
[ERR:3] "disadvantages bailing" -> "disadvantages basin"
[OK] "harness" -> "harness"
[OK] "stoppers manners" -> "stoppers manners"
[ERR:1] "circuitries cheek" -> "circuitries check"
[OK] "completion heater" -> "completion heater"
[ERR:1] "milk structures" -> "milk structure"
[OK] "heads sides" -> "heads sides"
[ERR:4] "obligations" -> "combinations"
[OK] "percents wardrooms" -> "percents wardrooms"
[OK] "truths" -> "truths"
[OK] "ones" -> "ones"
[OK] "trades leapers" -> "trades leapers"
[OK] "hats drainers" -> "hats drainers"
[OK] "capstans exhausts" -> "capstans exhausts"
[OK] "love sewer" -> "love sewer"
[OK] "accord precedence" -> "accord precedence"
[OK] "fractures paygrades" -> "fractures paygrades"
[OK] "thumbs" -> "thumbs"
[ERR:1] "tie header" -> "tietheader"
[OK] "highway mill" -> "highway mill"
[OK] "answers self" -> "answers self"
[OK] "habits jugs" -> "habits jugs"
[ERR:2] "saturday citizens" -> "saturday cities"
[OK] "moons" -> "moons"
[OK] "machines" -> "machines"
[OK] "individuals galley" -> "individuals galley"
[OK] "sabotage" -> "sabotage"
[OK] "merchandise abbreviations" -> "merchandise abbreviations"
[OK] "strike hatchets" -> "strike hatchets"
[ERR:6] "facilities nylons" -> "facilities ride"
[OK] "patch" -> "patch"
[OK] "drainers train" -> "drainers train"
[OK] "abbreviations payment" -> "abbreviations payment"
[OK] "expenditure parties" -> "expenditure parties"
[OK] "leather" -> "leather"
[ERR:2] "tuition faults" -> "tuition facts"
[OK] "flame" -> "flame"
[ERR:1] "fee harbors" -> "fee harbor"
[OK] "fund" -> "fund"
[OK] "tugs totals" -> "tugs totals"
[ERR:1] "procurements fridays" -> "procurements friday"
[OK] "messengers helicopters" -> "messengers helicopters"
[OK] "dollars crew" -> "dollars crew"
[ERR:5] "memorandums breakdowns" -> "memorandums beacon"
[OK] "helm" -> "helm"
[OK] "workbooks" -> "workbooks"
[OK] "bilge" -> "bilge"
[ERR:4] "loan element" -> "loan enemy"
[OK] "pattern" -> "pattern"
[OK] "lick" -> "lick"
[OK] "flush hatchet" -> "flush hatchet"
[OK] "members" -> "members"
[OK] "standard dirt" -> "standard dirt"
[OK] "terrains seasons" -> "terrains seasons"
[OK] "communities" -> "communities"
[OK] "calendars nonavailability" -> "calendars nonavailability"
[OK] "stoppers bear" -> "stoppers bear"
[OK] "limbs" -> "limbs"
[OK] "adjustments tub" -> "adjustments tub"
[ERR:4] "spear" -> "age"
[ERR:4] "nozzles" -> "nods"
[OK] "requisitions" -> "requisitions"
[OK] "leap senses" -> "leap senses"
[OK] "dictionaries" -> "dictionaries"
[OK] "nausea audits" -> "nausea audits"
[OK] "room draft" -> "room draft"
[ERR:2] "loop" -> "lap"
[ERR:1] "tablespoon fogs" -> "tablespoon fog"
[OK] "scratches" -> "scratches"
[OK] "battleship" -> "battleship"
[OK] "diary" -> "diary"
[OK] "substance" -> "substance"
[OK] "presumptions buttons" -> "presumptions buttons"
[OK] "swaps" -> "swaps"
[OK] "interaction" -> "interaction"
[OK] "nomenclature" -> "nomenclature"
[OK] "farads" -> "farads"
[OK] "disgust" -> "disgust"
[OK] "program" -> "program"
[ERR:2] "much ratio" -> "much rations"
[OK] "colds lumber" -> "colds lumber"
[OK] "mustard thousand" -> "mustard thousand"
[OK] "calendars" -> "calendars"
[OK] "sundays socks" -> "sundays socks"
[OK] "procurements" -> "procurements"
[OK] "dears" -> "dears"
[OK] "accruals screen" -> "accruals screen"
[OK] "health" -> "health"
[OK] "acids chest" -> "acids chest"
[OK] "cargo" -> "cargo"
[OK] "sheets" -> "sheets"
[ERR:1] "wingnuts" -> "wingnut"
[OK] "payroll" -> "payroll"
[OK] "standing" -> "standing"
[OK] "expert" -> "expert"
[OK] "comma gallows" -> "comma gallows"
[OK] "throttles chill" -> "throttles chill"
[OK] "modification" -> "modification"
[OK] "cable friend" -> "cable friend"
[OK] "exterior" -> "exterior"
[OK] "liquor" -> "liquor"
[OK] "roadside" -> "roadside"
[OK] "accord fetch" -> "accord fetch"
[OK] "wingnuts ignitions" -> "wingnuts ignitions"
[OK] "regulation" -> "regulation"
[OK] "jury" -> "jury"
[OK] "push" -> "push"
[OK] "seasoning shafts" -> "seasoning shafts"
[ERR:1] "tubs belts" -> "tubs bells"
[OK] "receipt" -> "receipt"
[OK] "objectives bodies" -> "objectives bodies"
[ERR:3] "learning manufacturers" -> "learning mnufacures"
[OK] "defections" -> "defections"
[OK] "airspeed fleet" -> "airspeed fleet"
[OK] "exchangers incentive" -> "exchangers incentive"
[OK] "case apprehensions" -> "case apprehensions"
[OK] "tens" -> "tens"
[OK] "varieties drops" -> "varieties drops"
[OK] "detection speech" -> "detection speech"
[OK] "fighting" -> "fighting"
[OK] "throttles" -> "throttles"
[OK] "overvoltages" -> "overvoltages"
[OK] "fans" -> "fans"
[OK] "badge" -> "badge"
[OK] "typist shocks" -> "typist shocks"
[OK] "satellites clips" -> "satellites clips"
[OK] "dependents" -> "dependents"
[OK] "states" -> "states"
[OK] "brace" -> "brace"
[OK] "twirls" -> "twirls"
[OK] "growths diagnoses" -> "growths diagnoses"
[ERR:4] "radar drops" -> "radar deck"
[OK] "inches crusts" -> "inches crusts"
[OK] "guideline bows" -> "guideline bows"
[ERR:1] "deflectors" -> "deflector"
[OK] "hashmark" -> "hashmark"
[OK] "intents" -> "intents"
[OK] "trips click" -> "trips click"
[OK] "mechanism" -> "mechanism"
[OK] "focus" -> "focus"
[OK] "science" -> "science"
[OK] "cot arrests" -> "cot arrests"
[OK] "blueprints" -> "blueprints"
[OK] "alert guard" -> "alert guard"
[OK] "shows utilities" -> "shows utilities"
[OK] "storm" -> "storm"
[OK] "helmsman baseline" -> "helmsman baseline"
[OK] "brace" -> "brace"
[OK] "choice" -> "choice"
[OK] "officials needle" -> "officials needle"
[OK] "application guest" -> "application guest"
[OK] "squadron bristles" -> "squadron bristles"
[OK] "compressors" -> "compressors"
[OK] "purpose" -> "purpose"
[ERR:4] "behavior finish" -> "behavior bin"
[ERR:3] "hems tickets" -> "hems tick"
[OK] "casualty turnarounds" -> "casualty turnarounds"
[OK] "thresholds" -> "thresholds"
[OK] "validations lighter" -> "validations lighter"
Character error rate: 3.43084630524244%. Word accuracy: 87.52499999999999%.
Out[72]:
0.0343084630524244

 Prediction

In [73]:
# Reset graph
tf.compat.v1.reset_default_graph()

# Specify parameters
decoderType = DecoderType.BeamSearch

loader = DataLoader(batch_size, imgSize, maxTextLen, nEpoch=nEpoch)

# save characters of model for inference mode
open(FilePaths.fnCharList, 'w').write(str().join(loader.charList))

# save words contained in dataset into file
open(FilePaths.fnCorpus, 'w').write(str(' ').join(loader.trainWords + loader.validationWords))

# execute test
model = Model(loader.charList, decoderType, mustRestore=True, corpus=word_corpus)
response = predpred(model, loader)
/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).
  '`tf.layers.batch_normalization` is deprecated and '
/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.
  warnings.warn('`layer.apply` is deprecated and '
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.
/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.
  warnings.warn("`tf.nn.rnn_cell.LSTMCell` is deprecated and will be "
/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.
  warnings.warn('`layer.add_variable` is deprecated and '
Tensorflow: 2.4.0
Init with stored values from model/snapshot-1
INFO:tensorflow:Restoring parameters from model/snapshot-1
Prediction NN
Batch: 1 / 20
Batch: 2 / 20
Batch: 3 / 20
Batch: 4 / 20
Batch: 5 / 20
Batch: 6 / 20
Batch: 7 / 20
Batch: 8 / 20
Batch: 9 / 20
Batch: 10 / 20
Batch: 11 / 20
Batch: 12 / 20
Batch: 13 / 20
Batch: 14 / 20
Batch: 15 / 20
Batch: 16 / 20
Batch: 17 / 20
Batch: 18 / 20
Batch: 19 / 20
Batch: 20 / 20

Store response in CSV file

In [76]:
df_res = pd.read_csv('data/sample_submission.csv', index_col=0)
df_res.label[:] = response
df_res.to_csv('answer_123.csv')

Comments

You must login before you can post a comment.

Execute