In [1]:
print("X")


X

In [2]:
%%time

import json
reviews = []
with open("yelp_academic_dataset_review.json") as f:
    index = 0
    for line in f:
        if index % 1000000 == 0:
            print(index)
        index += 1
        reviews.append(json.loads(line))


0
1000000
2000000
3000000
4000000
CPU times: user 43.1 s, sys: 5.39 s, total: 48.5 s
Wall time: 23min 52s

In [3]:
print(reviews[0])


{'useful': 0, 'date': '2011-10-10', 'type': 'review', 'review_id': 'NxL8SIC5yqOdnlXCg18IBg', 'text': "If you enjoy service by someone who is as competent as he is personable, I would recommend Corey Kaplan highly. The time he has spent here has been very productive and working with him educational and enjoyable. I hope not to need him again (though this is highly unlikely) but knowing he is there if I do is very nice. By the way, I'm not from El Centro, CA. but Scottsdale, AZ.", 'stars': 5, 'funny': 0, 'business_id': '2aFiy99vNLklCx3T_tGS9A', 'cool': 0, 'user_id': 'KpkOkG6RIf4Ra25Lhhxf1A'}

In [43]:
from collections import Counter
prolific_reviewers = Counter([review['user_id'] for review in reviews]).most_common(50)

In [44]:
keep_ids = {pr[0] : 0 for pr in prolific_reviewers}

In [45]:
by_author = {} # author : "review 1\n review 2\n review 3"
for review in reviews:
    uid = review['user_id']
    if uid in keep_ids:
        uid = review['user_id']
        if uid in by_author:
            by_author[uid] += "\n{}".format(review['text'])
        else:
            by_author[uid] = "{}".format(review['text'])

In [46]:
len(by_author)


Out[46]:
50

In [47]:
# check that we have at least 200000 characters for each author
sorted([(len(by_author[key]), key) for key in by_author])[:5]


Out[47]:
[(276136, 'ffPY_bHX8vLebHu8LBEqfg'),
 (278427, 'PeLGa5vUR8_mcsn-fn42Jg'),
 (338936, 'Q4Qfu-3vYtL1LRm2X1b0Gg'),
 (351311, 'cMEtAiW60I5wE_vLfTxoJQ'),
 (370129, 'iDlkZO2iILS8Jwfdy7DP9A')]

In [48]:
def get_chunks(l, n):
    n = max(1, n)
    return [l[i:i+n] for i in range(0, len(l), n)]

In [49]:
train_texts = []  # the first 100 000 chars from each author
train_labels = [] # each author
test_texts = []   # 100 texts of 1000 characters each (second 100 000 chars of each author)
test_labels = []  # each author * 100

author_int = {author: i for i,author in enumerate(by_author)}
int_author = {author_int[author]: author for author in author_int}

for author in by_author:
    train_text = by_author[author][:50000]
    train_label = author_int[author]
    train_texts.append(train_text)
    train_labels.append(train_label)
    
    short_texts = get_chunks(by_author[author][50000:100000], 1000)
    for text in short_texts:
        test_texts.append(text)
        test_labels.append(author_int[author])

In [50]:
data = {
    "train_texts": train_texts,
    "train_labels": train_labels,
    "test_texts": test_texts,
    "test_labels": test_labels
}

In [51]:
import pickle

with open("train_test_texts_labels.pickle", "wb") as f:
    pickle.dump(data, f)

In [52]:
import pickle

with open("train_test_texts_labels.pickle", "rb") as f:
    data = pickle.load(f)

In [53]:
train_texts = data['train_texts']
train_labels = data['train_labels']
test_texts = data['test_texts']
test_labels = data['test_labels']

In [54]:
print(len(train_texts), len(test_texts))


50 2500

In [55]:
len(train_texts[0])


Out[55]:
50000

In [56]:
# vectorization - chars to ints
import string
import random
import sys

import numpy as np

from keras.models import load_model

def sample(preds, temperature=1.0):
    """Sample predictions from a probability array"""
    preds = np.asarray(preds).astype('float64')
    preds = np.log(preds + 1e-6) / temperature
    exp_preds = np.exp(preds)
    preds = exp_preds / np.sum(exp_preds)
    probas = np.random.multinomial(1, preds, 1)
    return np.argmax(probas)

def generate(model, diversity=0.5, text=""):
    """Generate text from a model"""
    start_index = random.randint(0, len(text) - maxlen - 1)
    generated = ''
    sentence = text[start_index: start_index + maxlen]
    generated += sentence
    print('----- Generating with seed: "' + sentence + '"')
    sys.stdout.write(generated)

    for i in range(5000):
        x = np.zeros((1, maxlen), dtype=np.int)
        for t, char in enumerate(sentence):
            try:
                x[0, t] = char_indices[char]
            except:
                print(sentence)
        preds = model.predict(x, verbose=0)[0][0]
        next_index = sample(preds, diversity)
        next_char = indices_char[next_index]
        generated += next_char
        sentence = sentence[1:] + next_char
        sys.stdout.write(next_char)
        sys.stdout.flush()
    return

def vectorize(text):
    """Convert text into character sequences"""
    step = 3
    sentences = []
    next_chars = []
    for i in range(0, len(text) - maxlen, step):
        sentences.append(text[i: i + maxlen])
        next_chars.append(text[i + maxlen])
    X = np.zeros((len(sentences), maxlen), dtype=np.int)
    y = np.zeros((len(sentences), len(chars)), dtype=np.bool)
    for i, sentence in enumerate(sentences):
        for t, char in enumerate(sentence):
            X[i, t] = char_indices[char]
        y[i, char_indices[next_chars[i]]] = 1
    return X, y

def clean_text(text, charset):
    text = " ".join(text.split())  # all white space is one space
    text = "".join([x for x in text if x in charset])  # remove characters that we don't care about
    return text

def get_model(modelfile, freeze=False):
    model = load_model(modelfile)
    if freeze:
        for layer in model.layers[:6]:
            layer.trainable = False
    return model

chars = " " + string.ascii_letters + string.punctuation  # sorted to keep indices consistent
charset = set(chars)  # for lookup
char_indices = dict((c, i) for i, c in enumerate(chars))
indices_char = dict((i, c) for i, c in enumerate(chars))

maxlen = 100  # must match length which generated model - the sequence length

# load a pretrained language model
modelfile = "charlm2/model_middlemarch_cnn.hdf5"

In [60]:
from keras.models import Sequential
from keras.layers import Embedding, Dropout, BatchNormalization, GRU, Dense

# https://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html
print('Processing pretrained character embeds...')
embedding_vectors = {}
with open("glove.840B.300d-char.txt", "r") as f:
    for line in f:
        line_split = line.strip().split(" ")
        vec = np.array(line_split[1:], dtype=float)
        char = line_split[0]
        embedding_vectors[char] = vec

embedding_matrix = np.zeros((len(chars), 300))
#embedding_matrix = np.random.uniform(-1, 1, (len(chars), 300))
for char, i in char_indices.items():
    #print ("{}, {}".format(char, i))
    embedding_vector = embedding_vectors.get(char)
    if embedding_vector is not None:
        embedding_matrix[i] = embedding_vector

def get_gru_model(use_embeddings=False):
    model = Sequential()
    if use_embeddings:
        model.add(Embedding(input_dim=len(charset), output_dim=300, weights=[embedding_matrix]))
    else:
        model.add(Embedding(input_dim=len(charset), output_dim=300))
    model.add(Dropout(0.1))
    model.add(BatchNormalization())
    model.add(GRU(256))
    model.add(Dropout(0.3))
    model.add(BatchNormalization())
    model.add(Dense(85, activation='softmax'))
    model.compile(loss='categorical_crossentropy', optimizer='adam')
    return model


Processing pretrained character embeds...

In [61]:
%%time
test_model = get_gru_model()
X, y = vectorize(clean_text(train_texts[0], charset))
test_model.fit(X, y, epochs=10, batch_size=128, validation_split=0.1)


Train on 14831 samples, validate on 1648 samples
Epoch 1/10
14831/14831 [==============================] - 19s - loss: 3.1480 - val_loss: 3.9208
Epoch 2/10
14831/14831 [==============================] - 16s - loss: 2.4809 - val_loss: 3.2844
Epoch 3/10
14831/14831 [==============================] - 17s - loss: 2.2282 - val_loss: 2.7332
Epoch 4/10
14831/14831 [==============================] - 16s - loss: 2.0630 - val_loss: 2.3528
Epoch 5/10
14831/14831 [==============================] - 16s - loss: 1.9500 - val_loss: 2.1056
Epoch 6/10
14831/14831 [==============================] - 16s - loss: 1.8630 - val_loss: 2.0248
Epoch 7/10
14831/14831 [==============================] - 16s - loss: 1.7832 - val_loss: 2.0104
Epoch 8/10
14831/14831 [==============================] - 16s - loss: 1.7099 - val_loss: 2.0018
Epoch 9/10
14831/14831 [==============================] - 16s - loss: 1.6386 - val_loss: 1.9920
Epoch 10/10
14831/14831 [==============================] - 16s - loss: 1.5568 - val_loss: 2.0394
CPU times: user 4min 10s, sys: 18.8 s, total: 4min 29s
Wall time: 2min 55s

In [ ]:


In [ ]:
%%time
author_models = []  # [(author_model, author_id), (author_model, author_id), ...] - ids are ints
for i, train_text in enumerate(train_texts):
    print("{} / {}".format(i, len(train_texts)))
    ct = clean_text(train_text, charset)
    am = get_gru_model()
    X, y = vectorize(ct)
    am.fit(X, y, epochs=10, batch_size=128, verbose=0)
    author_models.append((am, train_labels[i]))


0 / 50
1 / 50
2 / 50
3 / 50
4 / 50
5 / 50
6 / 50
7 / 50
8 / 50
9 / 50
10 / 50
11 / 50
12 / 50
13 / 50
14 / 50
16 / 50
17 / 50
18 / 50
19 / 50
20 / 50
21 / 50
22 / 50
23 / 50
24 / 50
25 / 50
26 / 50
27 / 50
28 / 50
29 / 50
30 / 50
31 / 50
32 / 50
33 / 50
34 / 50
35 / 50
36 / 50
37 / 50
38 / 50
39 / 50
40 / 50
41 / 50
42 / 50
43 / 50
44 / 50
45 / 50
46 / 50
47 / 50
48 / 50
49 / 50
CPU times: user 3h 45min 50s, sys: 17min 12s, total: 4h 3min 2s
Wall time: 2h 35min 14s

In [64]:
print(1)


1

In [63]:
print(len(author_models))
print(len(test_texts))
print(len(test_labels))


50
2500
2500

In [65]:
from statistics import mean
word_counts = [text.count(" ") for text in test_texts]
mean(word_counts)


Out[65]:
182.5832

In [66]:
# 182 words is quite short
# Try to join 5 tests texts together
longer_test_texts = get_chunks(test_texts, 5)
longer_test_labels = get_chunks(test_labels, 5)

In [67]:
all([len(set(x)) == 1 for x in longer_test_labels])  # Make sure that all combined labels are the same


Out[67]:
True

In [68]:
longer_test_texts = ['\n'.join(chunk) for chunk in longer_test_texts]

In [69]:
longer_test_labels = [chunk[0] for chunk in longer_test_labels]

In [70]:
len(longer_test_texts)


Out[70]:
500

In [71]:
%%time
from random import shuffle
from datetime import datetime

def get_predictions(author_models, test_texts, test_labels):
    """Evaluate each text for each author_model and append first metric to predictions"""
    indicies = list(range(len(test_texts)))

    test_texts = np.array(test_texts)
    test_labels = np.array(test_labels)

    test_texts = test_texts[indicies]
    test_labels = test_labels[indicies]

    predictions = []
    for i, text in enumerate(test_texts):
        t1 = datetime.now()
        print("{} / {}".format(i, len(test_texts)), end=" ")
        X, y = vectorize(clean_text(text, charset))

        losses = []
        for am in author_models:
            print(".", end="")
            model = am[0]
            label = am[1]
            loss = model.evaluate(X, y, verbose=0)
            losses.append((loss, label))
        print(" {}".format(datetime.now() - t1))
        predictions.append(losses)
    return predictions
    

predictions_long = get_predictions(author_models, longer_test_texts, longer_test_labels)


0 / 500 .................................................. 0:04:53.823562
1 / 500 .................................................. 0:01:29.357596
2 / 500 .................................................. 0:01:29.403903
3 / 500 .................................................. 0:01:29.457545
4 / 500 .................................................. 0:01:29.418732
5 / 500 .................................................. 0:01:29.402586
6 / 500 .................................................. 0:01:29.338355
7 / 500 .................................................. 0:01:29.299863
8 / 500 .................................................. 0:01:29.201831
9 / 500 .................................................. 0:01:29.215665
10 / 500 .................................................. 0:01:29.218467
11 / 500 .................................................. 0:01:29.156110
12 / 500 .................................................. 0:01:29.178234
13 / 500 .................................................. 0:01:29.257610
14 / 500 .................................................. 0:01:29.327733
15 / 500 .................................................. 0:01:29.421585
16 / 500 .................................................. 0:01:29.383154
17 / 500 .................................................. 0:01:29.310579
18 / 500 .................................................. 0:01:29.286682
19 / 500 .................................................. 0:01:29.370293
20 / 500 .................................................. 0:01:29.478384
21 / 500 .................................................. 0:01:29.339718
22 / 500 .................................................. 0:01:29.308610
23 / 500 .................................................. 0:01:29.285973
24 / 500 .................................................. 0:01:29.284933
25 / 500 .................................................. 0:01:29.271699
26 / 500 .................................................. 0:01:29.310228
27 / 500 .................................................. 0:01:29.279211
28 / 500 .................................................. 0:01:29.303016
29 / 500 .................................................. 0:01:29.298737
30 / 500 .................................................. 0:01:29.152147
31 / 500 .................................................. 0:01:29.194914
32 / 500 .................................................. 0:01:27.611336
33 / 500 .................................................. 0:01:29.188967
34 / 500 .................................................. 0:01:29.159004
35 / 500 .................................................. 0:01:29.423076
36 / 500 .................................................. 0:01:29.170725
37 / 500 .................................................. 0:01:29.245325
38 / 500 .................................................. 0:01:29.155090
39 / 500 .................................................. 0:01:29.187568
40 / 500 .................................................. 0:01:27.786165
41 / 500 .................................................. 0:01:29.294818
42 / 500 .................................................. 0:01:28.379429
43 / 500 .................................................. 0:01:31.315155
44 / 500 .................................................. 0:01:29.598726
45 / 500 .................................................. 0:01:27.999974
46 / 500 .................................................. 0:01:29.178190
47 / 500 .................................................. 0:01:29.180526
48 / 500 .................................................. 0:01:29.261730
49 / 500 .................................................. 0:01:29.194141
50 / 500 .................................................. 0:01:29.330793
51 / 500 .................................................. 0:01:29.300381
52 / 500 .................................................. 0:01:29.251712
53 / 500 .................................................. 0:01:29.269716
54 / 500 .................................................. 0:01:29.280158
55 / 500 .................................................. 0:01:29.286157
56 / 500 .................................................. 0:01:29.268443
57 / 500 .................................................. 0:01:30.518024
58 / 500 .................................................. 0:01:31.304159
59 / 500 .................................................. 0:01:31.310046
60 / 500 .................................................. 0:01:31.321730
61 / 500 .................................................. 0:01:31.435841
62 / 500 .................................................. 0:01:31.384364
63 / 500 .................................................. 0:01:31.420921
64 / 500 .................................................. 0:01:31.373423
65 / 500 .................................................. 0:01:31.402962
66 / 500 .................................................. 0:01:31.332208
67 / 500 .................................................. 0:01:31.337926
68 / 500 .................................................. 0:01:31.324558
69 / 500 .................................................. 0:01:31.294203
70 / 500 .................................................. 0:01:31.243505
71 / 500 .................................................. 0:01:31.228101
72 / 500 .................................................. 0:01:29.596148
73 / 500 .................................................. 0:01:29.555263
74 / 500 .................................................. 0:01:31.239782
75 / 500 .................................................. 0:01:29.546468
76 / 500 .................................................. 0:01:29.548159
77 / 500 .................................................. 0:01:29.473878
78 / 500 .................................................. 0:01:29.461476
79 / 500 .................................................. 0:01:31.228102
80 / 500 .................................................. 0:01:31.399889
81 / 500 .................................................. 0:01:31.331286
82 / 500 .................................................. 0:01:31.312273
83 / 500 .................................................. 0:01:31.353722
84 / 500 .................................................. 0:01:31.370625
85 / 500 .................................................. 0:01:31.218542
86 / 500 .................................................. 0:01:31.332046
87 / 500 .................................................. 0:01:29.336997
88 / 500 .................................................. 0:01:29.240632
89 / 500 .................................................. 0:01:29.274116
90 / 500 .................................................. 0:01:29.326343
91 / 500 .................................................. 0:01:29.260267
92 / 500 .................................................. 0:01:29.294301
93 / 500 .................................................. 0:01:29.276195
94 / 500 .................................................. 0:01:30.900014
95 / 500 .................................................. 0:01:29.383476
96 / 500 .................................................. 0:01:29.396899
97 / 500 .................................................. 0:01:29.356665
98 / 500 .................................................. 0:01:29.369516
99 / 500 .................................................. 0:01:31.275173
100 / 500 .................................................. 0:01:31.347635
101 / 500 .................................................. 0:01:31.393623
102 / 500 .................................................. 0:01:31.347320
103 / 500 .................................................. 0:01:31.375181
104 / 500 .................................................. 0:01:31.311148
105 / 500 .................................................. 0:01:31.387397
106 / 500 .................................................. 0:01:31.367275
107 / 500 .................................................. 0:01:31.338472
108 / 500 .................................................. 0:01:31.328217
109 / 500 .................................................. 0:01:31.387294
110 / 500 .................................................. 0:01:29.615783
111 / 500 .................................................. 0:01:31.243825
112 / 500 .................................................. 0:01:31.158846
113 / 500 .................................................. 0:01:31.100170
114 / 500 .................................................. 0:01:31.254315
115 / 500 .................................................. 0:01:31.249152
116 / 500 .................................................. 0:01:31.238190
117 / 500 .................................................. 0:01:31.247292
118 / 500 .................................................. 0:01:31.156884
119 / 500 .................................................. 0:01:29.593372
120 / 500 .................................................. 0:01:31.333271
121 / 500 .................................................. 0:01:31.355232
122 / 500 .................................................. 0:01:31.128229
123 / 500 .................................................. 0:01:31.173251
124 / 500 .................................................. 0:01:31.214446
125 / 500 .................................................. 0:01:31.267996
126 / 500 .................................................. 0:01:31.282000
127 / 500 .................................................. 0:01:31.285395
128 / 500 .................................................. 0:01:31.345288
129 / 500 .................................................. 0:01:31.306279
130 / 500 .................................................. 0:01:31.289196
131 / 500 .................................................. 0:01:31.269467
132 / 500 .................................................. 0:01:31.285420
133 / 500 .................................................. 0:01:31.275581
134 / 500 .................................................. 0:01:31.463589
135 / 500 .................................................. 0:01:31.358504
136 / 500 .................................................. 0:01:31.314517
137 / 500 .................................................. 0:01:31.379302
138 / 500 .................................................. 0:01:31.361220
139 / 500 .................................................. 0:01:31.377806
140 / 500 .................................................. 0:01:31.355625
141 / 500 .................................................. 0:01:31.397016
142 / 500 .................................................. 0:01:31.362150
143 / 500 .................................................. 0:01:31.290609
144 / 500 .................................................. 0:01:31.338056
145 / 500 .................................................. 0:01:31.301164
146 / 500 .................................................. 0:01:31.368888
147 / 500 .................................................. 0:01:31.384695
148 / 500 .................................................. 0:01:31.399871
149 / 500 .................................................. 0:01:31.347783
150 / 500 .................................................. 0:01:31.315141
151 / 500 .................................................. 0:01:29.587088
152 / 500 .................................................. 0:01:29.632068
153 / 500 .................................................. 0:01:29.634604
154 / 500 .................................................. 0:01:31.227712
155 / 500 .................................................. 0:01:31.208059
156 / 500 .................................................. 0:01:29.620271
157 / 500 .................................................. 0:01:31.359682
158 / 500 .................................................. 0:01:29.602609
159 / 500 .................................................. 0:01:31.230380
160 / 500 .................................................. 0:01:31.329277
161 / 500 .................................................. 0:01:31.349188
162 / 500 .................................................. 0:01:31.279552
163 / 500 .................................................. 0:01:31.305497
164 / 500 .................................................. 0:01:31.312618
165 / 500 .................................................. 0:01:31.264765
166 / 500 .................................................. 0:01:31.318770
167 / 500 .................................................. 0:01:31.261898
168 / 500 .................................................. 0:01:29.651436
169 / 500 .................................................. 0:01:29.205188
170 / 500 .................................................. 0:01:29.277407
171 / 500 .................................................. 0:01:29.245709
172 / 500 .................................................. 0:01:29.253370
173 / 500 .................................................. 0:01:29.219863
174 / 500 .................................................. 0:01:29.154296
175 / 500 .................................................. 0:01:29.307466
176 / 500 .................................................. 0:01:29.314791
177 / 500 .................................................. 0:01:29.423372
178 / 500 .................................................. 0:01:29.234599
179 / 500 .................................................. 0:01:29.268434
180 / 500 .................................................. 0:01:29.249972
181 / 500 .................................................. 0:01:29.298749
182 / 500 .................................................. 0:01:29.280976
183 / 500 .................................................. 0:01:29.219671
184 / 500 .................................................. 0:01:29.286034
185 / 500 .................................................. 0:01:29.248134
186 / 500 .................................................. 0:01:29.258958
187 / 500 .................................................. 0:01:29.237072
188 / 500 .................................................. 0:01:29.259329
189 / 500 .................................................. 0:01:29.267715
190 / 500 .................................................. 0:01:29.155892
191 / 500 .................................................. 0:01:29.145314
192 / 500 .................................................. 0:01:29.213575
193 / 500 .................................................. 0:01:29.210366
194 / 500 .................................................. 0:01:29.239404
195 / 500 .................................................. 0:01:29.213927
196 / 500 .................................................. 0:01:29.264201
197 / 500 .................................................. 0:01:29.227647
198 / 500 .................................................. 0:01:27.622366
199 / 500 .................................................. 0:01:29.242989
200 / 500 .................................................. 0:01:29.327959
201 / 500 .................................................. 0:01:29.340148
202 / 500 .................................................. 0:01:29.368873
203 / 500 .................................................. 0:01:29.400102
204 / 500 .................................................. 0:01:29.367655
205 / 500 .................................................. 0:01:29.294455
206 / 500 .................................................. 0:01:29.401753
207 / 500 .................................................. 0:01:29.380837
208 / 500 .................................................. 0:01:29.327215
209 / 500 .................................................. 0:01:29.345573
210 / 500 .................................................. 0:01:29.351936
211 / 500 .................................................. 0:01:29.274630
212 / 500 .................................................. 0:01:29.307538
213 / 500 .................................................. 0:01:29.299194
214 / 500 .................................................. 0:01:29.258275
215 / 500 .................................................. 0:01:29.260551
216 / 500 .................................................. 0:01:29.288556
217 / 500 .................................................. 0:01:29.283050
218 / 500 .................................................. 0:01:29.267942
219 / 500 .................................................. 0:01:29.236104
220 / 500 .................................................. 0:01:29.339491
221 / 500 .................................................. 0:01:29.303076
222 / 500 .................................................. 0:01:29.292002
223 / 500 .................................................. 0:01:29.386147
224 / 500 .................................................. 0:01:29.345570
225 / 500 .................................................. 0:01:29.303094
226 / 500 .................................................. 0:01:29.352727
227 / 500 .................................................. 0:01:29.399909
228 / 500 .................................................. 0:01:29.314526
229 / 500 .................................................. 0:01:29.354569
230 / 500 .................................................. 0:01:29.369909
231 / 500 .................................................. 0:01:29.300445
232 / 500 .................................................. 0:01:29.322538
233 / 500 .................................................. 0:01:29.304046
234 / 500 .................................................. 0:01:29.312901
235 / 500 .................................................. 0:01:29.246834
236 / 500 .................................................. 0:01:29.316472
237 / 500 .................................................. 0:01:29.320418
238 / 500 .................................................. 0:01:29.324453
239 / 500 .................................................. 0:01:29.345535
240 / 500 .................................................. 0:01:29.227846
241 / 500 .................................................. 0:01:29.260723
242 / 500 .................................................. 0:01:29.223342
243 / 500 .................................................. 0:01:29.236894
244 / 500 .................................................. 0:01:29.186312
245 / 500 .................................................. 0:01:29.223405
246 / 500 .................................................. 0:01:29.222177
247 / 500 .................................................. 0:01:29.232753
248 / 500 .................................................. 0:01:29.178040
249 / 500 .................................................. 0:01:29.189717
250 / 500 .................................................. 0:01:29.293353
251 / 500 .................................................. 0:01:29.267097
252 / 500 .................................................. 0:01:29.311062
253 / 500 .................................................. 0:01:29.342833
254 / 500 .................................................. 0:01:29.308097
255 / 500 .................................................. 0:01:29.272052
256 / 500 .................................................. 0:01:29.302788
257 / 500 .................................................. 0:01:29.298758
258 / 500 .................................................. 0:01:29.339742
259 / 500 .................................................. 0:01:29.267198
260 / 500 .................................................. 0:01:27.563043
261 / 500 .................................................. 0:01:27.573848
262 / 500 .................................................. 0:01:27.517535
263 / 500 .................................................. 0:01:29.250453
264 / 500 .................................................. 0:01:27.635219
265 / 500 .................................................. 0:01:27.542995
266 / 500 .................................................. 0:01:27.557443
267 / 500 .................................................. 0:01:29.194596
268 / 500 .................................................. 0:01:27.486810
269 / 500 .................................................. 0:01:27.576657
270 / 500 .................................................. 0:01:29.320985
271 / 500 .................................................. 0:01:29.321164
272 / 500 .................................................. 0:01:29.256303
273 / 500 .................................................. 0:01:29.257792
274 / 500 .................................................. 0:01:29.243413
275 / 500 .................................................. 0:01:25.863163
276 / 500 .................................................. 0:01:29.310716
277 / 500 .................................................. 0:01:29.259753
278 / 500 .................................................. 0:01:29.241048
279 / 500 .................................................. 0:01:29.175836
280 / 500 .................................................. 0:01:29.384074
281 / 500 .................................................. 0:01:29.311895
282 / 500 .................................................. 0:01:29.325466
283 / 500 .................................................. 0:01:29.328740
284 / 500 .................................................. 0:01:29.322017
285 / 500 .................................................. 0:01:29.330248
286 / 500 .................................................. 0:01:29.307551
287 / 500 .................................................. 0:01:29.271178
288 / 500 .................................................. 0:01:29.284269
289 / 500 .................................................. 0:01:29.319438
290 / 500 .................................................. 0:01:29.314952
291 / 500 .................................................. 0:01:29.244089
292 / 500 .................................................. 0:01:29.244502
293 / 500 .................................................. 0:01:29.248988
294 / 500 .................................................. 0:01:29.238110
295 / 500 .................................................. 0:01:29.185845
296 / 500 .................................................. 0:01:29.245222
297 / 500 .................................................. 0:01:29.261594
298 / 500 .................................................. 0:01:29.230911
299 / 500 .................................................. 0:01:29.256073
300 / 500 .................................................. 0:01:29.217887
301 / 500 .................................................. 0:01:29.212577
302 / 500 .................................................. 0:01:29.252750
303 / 500 .................................................. 0:01:29.239440
304 / 500 .................................................. 0:01:29.169651
305 / 500 .................................................. 0:01:29.185114
306 / 500 .................................................. 0:01:29.279152
307 / 500 .................................................. 0:01:29.219308
308 / 500 .................................................. 0:01:29.243046
309 / 500 .................................................. 0:01:29.253693
310 / 500 .................................................. 0:01:29.300793
311 / 500 .................................................. 0:01:29.289700
312 / 500 .................................................. 0:01:29.282394
313 / 500 .................................................. 0:01:29.278067
314 / 500 .................................................. 0:01:29.319170
315 / 500 .................................................. 0:01:29.307819
316 / 500 .................................................. 0:01:29.342382
317 / 500 .................................................. 0:01:29.312018
318 / 500 .................................................. 0:01:29.348257
319 / 500 .................................................. 0:01:29.312360
320 / 500 .................................................. 0:01:29.351458
321 / 500 .................................................. 0:01:29.398470
322 / 500 .................................................. 0:01:29.359452
323 / 500 .................................................. 0:01:29.394396
324 / 500 .................................................. 0:01:29.303149
325 / 500 .................................................. 0:01:29.344109
326 / 500 .................................................. 0:01:29.301312
327 / 500 .................................................. 0:01:29.301086
328 / 500 .................................................. 0:01:29.316883
329 / 500 .................................................. 0:01:29.308441
330 / 500 .................................................. 0:01:29.284104
331 / 500 .................................................. 0:01:29.326629
332 / 500 .................................................. 0:01:29.258847
333 / 500 .................................................. 0:01:29.319286
334 / 500 .................................................. 0:01:29.292448
335 / 500 .................................................. 0:01:29.359710
336 / 500 .................................................. 0:01:29.329391
337 / 500 .................................................. 0:01:29.306317
338 / 500 .................................................. 0:01:29.334338
339 / 500 .................................................. 0:01:29.247117
340 / 500 .................................................. 0:01:29.322743
341 / 500 .................................................. 0:01:29.301092
342 / 500 .................................................. 0:01:29.268474
343 / 500 .................................................. 0:01:29.284623
344 / 500 .................................................. 0:01:29.314226
345 / 500 .................................................. 0:01:29.290758
346 / 500 .................................................. 0:01:29.288761
347 / 500 .................................................. 0:01:29.296042
348 / 500 .................................................. 0:01:29.282794
349 / 500 .................................................. 0:01:29.310809
350 / 500 .................................................. 0:01:29.354275
351 / 500 .................................................. 0:01:29.366044
352 / 500 .................................................. 0:01:29.370009
353 / 500 .................................................. 0:01:29.330839
354 / 500 .................................................. 0:01:29.390903
355 / 500 .................................................. 0:01:29.363490
356 / 500 .................................................. 0:01:29.321908
357 / 500 .................................................. 0:01:29.327229
358 / 500 .................................................. 0:01:29.353005
359 / 500 .................................................. 0:01:29.294711
360 / 500 .................................................. 0:01:29.173945
361 / 500 .................................................. 0:01:29.180068
362 / 500 .................................................. 0:01:29.142864
363 / 500 .................................................. 0:01:29.188484
364 / 500 .................................................. 0:01:29.206523
365 / 500 .................................................. 0:01:27.561126
366 / 500 .................................................. 0:01:29.205199
367 / 500 .................................................. 0:01:29.214065
368 / 500 .................................................. 0:01:29.204250
369 / 500 .................................................. 0:01:29.138843
370 / 500 .................................................. 0:01:29.322548
371 / 500 .................................................. 0:01:29.362303
372 / 500 .................................................. 0:01:29.364270
373 / 500 .................................................. 0:01:29.261262
374 / 500 .................................................. 0:01:29.318731
375 / 500 .................................................. 0:01:29.288769
376 / 500 .................................................. 0:01:29.342162
377 / 500 .................................................. 0:01:29.344104
378 / 500 .................................................. 0:01:29.330373
379 / 500 .................................................. 0:01:29.320237
380 / 500 .................................................. 0:01:27.638689
381 / 500 .................................................. 0:01:29.203159
382 / 500 .................................................. 0:01:29.224186
383 / 500 .................................................. 0:01:29.216281
384 / 500 .................................................. 0:01:29.257356
385 / 500 .................................................. 0:01:27.597768
386 / 500 .................................................. 0:01:29.175791
387 / 500 .................................................. 0:01:29.231160
388 / 500 .................................................. 0:01:29.124025
389 / 500 .................................................. 0:01:29.186450
390 / 500 .................................................. 0:01:29.267552
391 / 500 .................................................. 0:01:29.323006
392 / 500 .................................................. 0:01:29.307764
393 / 500 .................................................. 0:01:29.297739
394 / 500 .................................................. 0:01:29.356474
395 / 500 .................................................. 0:01:29.318663
396 / 500 .................................................. 0:01:29.347881
397 / 500 .................................................. 0:01:29.279016
398 / 500 .................................................. 0:01:29.318094
399 / 500 .................................................. 0:01:29.307927
400 / 500 .................................................. 0:01:29.246609
401 / 500 .................................................. 0:01:29.189196
402 / 500 .................................................. 0:01:29.260609
403 / 500 .................................................. 0:01:29.207177
404 / 500 .................................................. 0:01:29.244198
405 / 500 .................................................. 0:01:29.223137
406 / 500 .................................................. 0:01:29.247506
407 / 500 .................................................. 0:01:29.221299
408 / 500 .................................................. 0:01:29.221892
409 / 500 .................................................. 0:01:29.237495
410 / 500 .................................................. 0:01:27.577317
411 / 500 .................................................. 0:01:29.184525
412 / 500 .................................................. 0:01:29.274179
413 / 500 .................................................. 0:01:29.242207
414 / 500 .................................................. 0:01:29.277844
415 / 500 .................................................. 0:01:29.239298
416 / 500 .................................................. 0:01:29.229594
417 / 500 .................................................. 0:01:29.178642
418 / 500 .................................................. 0:01:29.232881
419 / 500 .................................................. 0:01:29.242483
420 / 500 .................................................. 0:01:29.289688
421 / 500 .................................................. 0:01:29.342292
422 / 500 .................................................. 0:01:29.338981
423 / 500 .................................................. 0:01:29.297820
424 / 500 .................................................. 0:01:29.349288
425 / 500 .................................................. 0:01:29.286795
426 / 500 .................................................. 0:01:29.307077
427 / 500 .................................................. 0:01:29.291014
428 / 500 .................................................. 0:01:29.295856
429 / 500 .................................................. 0:01:29.308290
430 / 500 .................................................. 0:01:29.155027
431 / 500 .................................................. 0:01:29.189869
432 / 500 .................................................. 0:01:29.211507
433 / 500 .................................................. 0:01:27.590447
434 / 500 .................................................. 0:01:29.202817
435 / 500 .................................................. 0:01:29.217068
436 / 500 .................................................. 0:01:29.159146
437 / 500 .................................................. 0:01:29.212964
438 / 500 .................................................. 0:01:29.202807
439 / 500 .................................................. 0:01:29.190238
440 / 500 .................................................. 0:01:29.321917
441 / 500 .................................................. 0:01:29.324443
442 / 500 .................................................. 0:01:29.339277
443 / 500 .................................................. 0:01:29.297215
444 / 500 .................................................. 0:01:29.357958
445 / 500 .................................................. 0:01:29.317098
446 / 500 .................................................. 0:01:29.358255
447 / 500 .................................................. 0:01:29.318267
448 / 500 .................................................. 0:01:29.359730
449 / 500 .................................................. 0:01:29.379333
450 / 500 .................................................. 0:01:29.238592
451 / 500 .................................................. 0:01:29.290573
452 / 500 .................................................. 0:01:29.263526
453 / 500 .................................................. 0:01:29.278508
454 / 500 .................................................. 0:01:29.315881
455 / 500 .................................................. 0:01:29.246069
456 / 500 .................................................. 0:01:29.223428
457 / 500 .................................................. 0:01:29.261961
458 / 500 .................................................. 0:01:29.254578
459 / 500 .................................................. 0:01:29.220020
460 / 500 .................................................. 0:01:29.311067
461 / 500 .................................................. 0:01:29.239864
462 / 500 .................................................. 0:01:29.262583
463 / 500 .................................................. 0:01:29.231929
464 / 500 .................................................. 0:01:29.267904
465 / 500 .................................................. 0:01:29.538600
466 / 500 .................................................. 0:01:29.251325
467 / 500 .................................................. 0:01:29.284328
468 / 500 .................................................. 0:01:29.276368
469 / 500 .................................................. 0:01:29.247795
470 / 500 .................................................. 0:01:29.286557
471 / 500 .................................................. 0:01:29.301285
472 / 500 .................................................. 0:01:29.350276
473 / 500 .................................................. 0:01:29.365295
474 / 500 .................................................. 0:01:29.309347
475 / 500 .................................................. 0:01:29.239152
476 / 500 .................................................. 0:01:29.287929
477 / 500 .................................................. 0:01:29.332753
478 / 500 .................................................. 0:01:29.335129
479 / 500 .................................................. 0:01:29.332404
480 / 500 .................................................. 0:01:29.151002
481 / 500 .................................................. 0:01:27.592865
482 / 500 .................................................. 0:01:27.529685
483 / 500 .................................................. 0:01:27.602626
484 / 500 .................................................. 0:01:29.196841
485 / 500 .................................................. 0:01:27.607677
486 / 500 .................................................. 0:01:27.557596
487 / 500 .................................................. 0:01:27.551886
488 / 500 .................................................. 0:01:27.575954
489 / 500 .................................................. 0:01:27.604644
490 / 500 .................................................. 0:01:29.236734
491 / 500 .................................................. 0:01:29.286255
492 / 500 .................................................. 0:01:29.448514
493 / 500 .................................................. 0:01:29.236132
494 / 500 .................................................. 0:01:29.252972
495 / 500 .................................................. 0:01:29.261562
496 / 500 .................................................. 0:01:29.253702
497 / 500 .................................................. 0:01:29.218957
498 / 500 .................................................. 0:01:29.291095
499 / 500 .................................................. 0:01:29.183988
CPU times: user 10h 55min 8s, sys: 20.7 s, total: 10h 55min 28s
Wall time: 12h 29min 40s

In [72]:
len(predictions_long)


Out[72]:
500

In [73]:
print("X")


X

In [74]:
pred_is = []
for pred in predictions_long:
    pred_i = [p[0] for p in pred]
    pred_is.append(pred_i)

In [75]:
pred_labs = [np.argmin(pred) for pred in pred_is]

In [76]:
from sklearn.metrics import accuracy_score
accuracy_score(longer_test_labels, pred_labs)


Out[76]:
0.90000000000000002

In [ ]:


In [ ]:
test_author_model.summary()

In [ ]:
test_author_model.evaluatei

In [ ]:
len(train_texts)

In [ ]:
len(train_labels)

In [116]:
from sklearn.pipeline import FeatureUnion
from sklearn.feature_extraction.text import TfidfVectorizer
word_vec = TfidfVectorizer(min_df=5, ngram_range=(1,2), lowercase=False)
char_vec = TfidfVectorizer(min_df=5, ngram_range=(2,3), lowercase=False)

fu = FeatureUnion([
    ('word', word_vec),
    ('char', char_vec)
])


X_train = fu.fit_transform(train_texts)

In [117]:
X_test = fu.transform(test_texts)

In [118]:
from sklearn.svm import LinearSVC

svm = LinearSVC()

In [119]:
svm.fit(X_train, train_labels)


Out[119]:
LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,
     intercept_scaling=1, loss='squared_hinge', max_iter=1000,
     multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,
     verbose=0)

In [120]:
preds = svm.predict(X_test)

In [121]:
accuracy_score(test_labels, preds)


Out[121]:
0.44600000000000001

In [122]:
X_test_longer = fu.transform(longer_test_texts)

In [123]:
preds = svm.predict(X_test_longer)

In [124]:
accuracy_score(longer_test_labels, preds)


Out[124]:
0.88400000000000001

In [114]:
X.shape


Out[114]:
(16400, 100)

In [115]:
X, y = vectorize(clean_text(train_texts[3], charset))

In [ ]:
X.shape

In [ ]:
y.shape

In [ ]:
y[0]

In [ ]:
X[0]

In [ ]:
test_author_model.layers[:6]

In [37]:
import numpy
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
from keras.layers import LSTM, Input, Embedding, Conv1D, MaxPooling1D, BatchNormalization, GRU
from keras.callbacks import ModelCheckpoint
from keras.utils import np_utils

# load ascii text and covert to lowercase

# cnn = Dropout(0.2)(embedded)
# cnn = Conv1D(128, 5, activation='relu')(cnn)
# cnn = MaxPooling1D(pool_size=4)(cnn)

model = Sequential()
model.add(Embedding(input_dim=len(charset), output_dim=100))
model.add(Dropout(0.1))
model.add(BatchNormalization())
model.add(GRU(256))
model.add(Dropout(0.3))
model.add(BatchNormalization())
model.add(Dense(y.shape[1], activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam')
model.fit(X, y, epochs=13, batch_size=128, validation_split=0.1)

"""
LSTM, BatchNorm
Train on 14929 samples, validate on 1659 samples
Epoch 1/5
14929/14929 [==============================] - 75s - loss: 3.0403 - val_loss: 3.4757
Epoch 2/5
14929/14929 [==============================] - 60s - loss: 2.3156 - val_loss: 2.9687

LSTM
Train on 14929 samples, validate on 1659 samples
Epoch 1/5
14929/14929 [==============================] - 75s - loss: 3.1259 - val_loss: 2.7865
Epoch 2/5
14929/14929 [==============================] - 60s - loss: 2.6150 - val_loss: 2.3894

CNN(5), LSTM  # faster, needs more epochs
Train on 14929 samples, validate on 1659 samples
Epoch 1/5
14929/14929 [==============================] - 42s - loss: 3.1579 - val_loss: 2.9987
Epoch 2/5
14929/14929 [==============================] - 26s - loss: 2.8874 - val_loss: 2.6994
Epoch 3/5
14929/14929 [==============================] - 26s - loss: 2.6220 - val_loss: 2.4879
Epoch 4/5
14929/14929 [==============================] - 26s - loss: 2.4309 - val_loss: 2.3942
Epoch 5/5
14929/14929 [==============================] - 26s - loss: 2.2950 - val_loss: 2.2902

CNN(5), CNN(3), LSTM doesn't drop below 3.0 in 5 epochs


Embedding, BatchNorm, GRU, BatchNorm
Train on 14725 samples, validate on 1637 samples
Epoch 1/20
14725/14725 [==============================] - 16s - loss: 2.9240 - val_loss: 3.9516
Epoch 2/20
14725/14725 [==============================] - 15s - loss: 2.2447 - val_loss: 3.3667
Epoch 3/20
14725/14725 [==============================] - 15s - loss: 2.0054 - val_loss: 2.8011
Epoch 4/20
14725/14725 [==============================] - 15s - loss: 1.8388 - val_loss: 2.3477
Epoch 5/20
14725/14725 [==============================] - 15s - loss: 1.7122 - val_loss: 2.0196
Epoch 6/20
14725/14725 [==============================] - 15s - loss: 1.6069 - val_loss: 1.9417
Epoch 7/20
14725/14725 [==============================] - 15s - loss: 1.5044 - val_loss: 1.9541
Epoch 8/20
14725/14725 [==============================] - 15s - loss: 1.3987 - val_loss: 1.9512
Epoch 9/20
14725/14725 [==============================] - 15s - loss: 1.2940 - val_loss: 1.9921
Epoch 10/20
14725/14725 [==============================] - 15s - loss: 1.1850 - val_loss: 2.0424

Train on 14725 samples, validate on 1637 samples
Epoch 1/20
14725/14725 [==============================] - 17s - loss: 3.2577 - val_loss: 3.8892
Epoch 2/20
14725/14725 [==============================] - 15s - loss: 2.5444 - val_loss: 3.2364
Epoch 3/20
14725/14725 [==============================] - 15s - loss: 2.2915 - val_loss: 2.7205
Epoch 4/20
14725/14725 [==============================] - 15s - loss: 2.1258 - val_loss: 2.3477
Epoch 5/20
14725/14725 [==============================] - 15s - loss: 2.0219 - val_loss: 2.0588
Epoch 6/20
14725/14725 [==============================] - 15s - loss: 1.9386 - val_loss: 1.9478
Epoch 7/20
14725/14725 [==============================] - 15s - loss: 1.8762 - val_loss: 1.9152
Epoch 8/20
14725/14725 [==============================] - 15s - loss: 1.7994 - val_loss: 1.9076
Epoch 9/20
14725/14725 [==============================] - 15s - loss: 1.7224 - val_loss: 1.8829
Epoch 10/20
14725/14725 [==============================] - 15s - loss: 1.6783 - val_loss: 1.9007
Epoch 11/20
14725/14725 [==============================] - 15s - loss: 1.6154 - val_loss: 1.8910
Epoch 12/20
14725/14725 [==============================] - 15s - loss: 1.5485 - val_loss: 1.8920
Epoch 13/20
14725/14725 [==============================] - 15s - loss: 1.4844 - val_loss: 1.9198
Epoch 14/20
14725/14725 [==============================] - 15s - loss: 1.4291 - val_loss: 1.9193
Epoch 15/20
14725/14725 [==============================] - 15s - loss: 1.3670 - val_loss: 1.9295
Epoch 16/20
14725/14725 [==============================] - 15s - loss: 1.3028 - val_loss: 1.9752
Epoch 17/20
14725/14725 [==============================] - 15s - loss: 1.2321 - val_loss: 1.9969
Epoch 18/20
14725/14725 [==============================] - 15s - loss: 1.2159 - val_loss: 2.0431
Epoch 19/20
14725/14725 [==============================] - 15s - loss: 1.1391 - val_loss: 2.0709
Epoch 20/20
14725/14725 [==============================] - 15s - loss: 1.1321 - val_loss: 2.1172


model = Sequential()
model.add(Embedding(input_dim=len(charset), output_dim=100))
model.add(BatchNormalization())
model.add(GRU(256))
model.add(Dropout(0.5))
model.add(BatchNormalization())
model.add(Dense(y.shape[1], activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam')
model.fit(X, y, epochs=20, batch_size=128, validation_split=0.1)
Train on 14725 samples, validate on 1637 samples
Epoch 1/20
14725/14725 [==============================] - 17s - loss: 3.2577 - val_loss: 3.8892
Epoch 2/20
14725/14725 [==============================] - 15s - loss: 2.5444 - val_loss: 3.2364
Epoch 3/20
14725/14725 [==============================] - 15s - loss: 2.2915 - val_loss: 2.7205
Epoch 4/20
14725/14725 [==============================] - 15s - loss: 2.1258 - val_loss: 2.3477
Epoch 5/20
14725/14725 [==============================] - 15s - loss: 2.0219 - val_loss: 2.0588
Epoch 6/20
14725/14725 [==============================] - 15s - loss: 1.9386 - val_loss: 1.9478
Epoch 7/20
14725/14725 [==============================] - 15s - loss: 1.8762 - val_loss: 1.9152
Epoch 8/20
14725/14725 [==============================] - 15s - loss: 1.7994 - val_loss: 1.9076
Epoch 9/20
14725/14725 [==============================] - 15s - loss: 1.7224 - val_loss: 1.8829
Epoch 10/20
14725/14725 [==============================] - 15s - loss: 1.6783 - val_loss: 1.9007
Epoch 11/20
14725/14725 [==============================] - 15s - loss: 1.6154 - val_loss: 1.8910
Epoch 12/20
14725/14725 [==============================] - 15s - loss: 1.5485 - val_loss: 1.8920
Epoch 13/20
14725/14725 [==============================] - 15s - loss: 1.4844 - val_loss: 1.9198
Epoch 14/20
14725/14725 [==============================] - 15s - loss: 1.4291 - val_loss: 1.9193
Epoch 15/20
14725/14725 [==============================] - 15s - loss: 1.3670 - val_loss: 1.9295
Epoch 16/20
14725/14725 [==============================] - 15s - loss: 1.3028 - val_loss: 1.9752
Epoch 17/20
14725/14725 [==============================] - 15s - loss: 1.2321 - val_loss: 1.9969
Epoch 18/20
14725/14725 [==============================] - 15s - loss: 1.2159 - val_loss: 2.0431
Epoch 19/20
14725/14725 [==============================] - 15s - loss: 1.1391 - val_loss: 2.0709
Epoch 20/20
14725/14725 [==============================] - 15s - loss: 1.1321 - val_loss: 2.1172


model = Sequential()
model.add(Embedding(input_dim=len(charset), output_dim=100))
model.add(GRU(256))
model.add(BatchNormalization())
model.add(Dropout(0.5))
model.add(Dense(y.shape[1], activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam')
model.fit(X, y, epochs=20, batch_size=128, validation_split=0.1)
Train on 14725 samples, validate on 1637 samples
Epoch 1/20
14725/14725 [==============================] - 16s - loss: 3.1731 - val_loss: 3.5648
Epoch 2/20
14725/14725 [==============================] - 14s - loss: 2.4964 - val_loss: 2.9875
Epoch 3/20
14725/14725 [==============================] - 14s - loss: 2.3446 - val_loss: 2.7695
Epoch 4/20
14725/14725 [==============================] - 14s - loss: 2.2928 - val_loss: 2.6010
Epoch 5/20
14725/14725 [==============================] - 14s - loss: 2.2642 - val_loss: 2.3900
Epoch 6/20
14725/14725 [==============================] - 14s - loss: 2.2373 - val_loss: 2.5023
Epoch 7/20
14725/14725 [==============================] - 14s - loss: 2.2186 - val_loss: 2.3780
Epoch 8/20
14725/14725 [==============================] - 14s - loss: 2.2029 - val_loss: 2.4928
Epoch 9/20
14725/14725 [==============================] - 14s - loss: 2.1852 - val_loss: 2.3480
Epoch 10/20
14725/14725 [==============================] - 14s - loss: 2.1745 - val_loss: 2.4801
Epoch 11/20
14725/14725 [==============================] - 14s - loss: 2.1563 - val_loss: 2.3951
Epoch 12/20
14725/14725 [==============================] - 14s - loss: 2.1391 - val_loss: 2.4133
Epoch 13/20
14725/14725 [==============================] - 14s - loss: 2.1192 - val_loss: 2.5896
Epoch 14/20
14725/14725 [==============================] - 14s - loss: 2.1020 - val_loss: 2.2692
Epoch 15/20
14725/14725 [==============================] - 14s - loss: 2.0770 - val_loss: 2.2179
Epoch 16/20
14725/14725 [==============================] - 14s - loss: 2.0643 - val_loss: 2.2822
Epoch 17/20
 6784/14725 [============>.................] - ETA: 7s - loss: 2.0302


model = Sequential()
model.add(Embedding(input_dim=len(charset), output_dim=100))
model.add(Dropout(0.2))
model.add(BatchNormalization())
model.add(GRU(256))
model.add(Dropout(0.2))
model.add(BatchNormalization())
model.add(Dense(y.shape[1], activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam')
model.fit(X, y, epochs=20, batch_size=128, validation_split=0.1)
Train on 14725 samples, validate on 1637 samples
Epoch 1/20
14725/14725 [==============================] - 17s - loss: 3.1528 - val_loss: 3.9042
Epoch 2/20
14725/14725 [==============================] - 15s - loss: 2.4658 - val_loss: 3.2093
Epoch 3/20
14725/14725 [==============================] - 15s - loss: 2.2001 - val_loss: 2.6764
Epoch 4/20
14725/14725 [==============================] - 15s - loss: 2.0358 - val_loss: 2.2919
Epoch 5/20
14725/14725 [==============================] - 15s - loss: 1.9497 - val_loss: 2.0060
Epoch 6/20
14725/14725 [==============================] - 15s - loss: 1.8588 - val_loss: 1.9313
Epoch 7/20
14725/14725 [==============================] - 15s - loss: 1.7883 - val_loss: 1.9153
Epoch 8/20
14725/14725 [==============================] - 15s - loss: 1.7034 - val_loss: 1.9145
Epoch 9/20
14725/14725 [==============================] - 15s - loss: 1.6382 - val_loss: 1.8979
Epoch 10/20
14725/14725 [==============================] - 15s - loss: 1.5827 - val_loss: 1.8864
Epoch 11/20
14725/14725 [==============================] - 15s - loss: 1.5093 - val_loss: 1.8967
Epoch 12/20
14725/14725 [==============================] - 15s - loss: 1.4472 - val_loss: 1.9040
Epoch 13/20
14725/14725 [==============================] - 15s - loss: 1.3809 - val_loss: 1.9227
Epoch 14/20
14725/14725 [==============================] - 15s - loss: 1.3225 - val_loss: 1.9469
Epoch 15/20
14725/14725 [==============================] - 15s - loss: 1.2516 - val_loss: 1.9862
Epoch 16/20
14725/14725 [==============================] - 15s - loss: 1.2094 - val_loss: 1.9963
Epoch 17/20
14725/14725 [==============================] - 15s - loss: 1.1658 - val_loss: 2.0331
Epoch 18/20
14725/14725 [==============================] - 15s - loss: 1.0851 - val_loss: 2.0452
Epoch 19/20
14725/14725 [==============================] - 15s - loss: 1.0394 - val_loss: 2.0810
Epoch 20/20
14725/14725 [==============================] - 15s - loss: 0.9903 - val_loss: 2.1283


model = Sequential()
model.add(Embedding(input_dim=len(charset), output_dim=100))
model.add(Dropout(0.3))
model.add(BatchNormalization())
model.add(GRU(256))
model.add(Dropout(0.3))
model.add(BatchNormalization())
model.add(Dense(y.shape[1], activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam')
model.fit(X, y, epochs=20, batch_size=128, validation_split=0.1)
Train on 14725 samples, validate on 1637 samples
Epoch 1/20
14725/14725 [==============================] - 17s - loss: 3.2991 - val_loss: 3.8902
Epoch 2/20
14725/14725 [==============================] - 15s - loss: 2.5672 - val_loss: 3.1627
Epoch 3/20
14725/14725 [==============================] - 15s - loss: 2.2731 - val_loss: 2.6340
Epoch 4/20
14725/14725 [==============================] - 15s - loss: 2.1316 - val_loss: 2.2594
Epoch 5/20
14725/14725 [==============================] - 15s - loss: 2.0249 - val_loss: 2.0159
Epoch 6/20
14725/14725 [==============================] - 15s - loss: 1.9571 - val_loss: 1.9456
Epoch 7/20
14725/14725 [==============================] - 15s - loss: 1.8789 - val_loss: 1.9213
Epoch 8/20
14725/14725 [==============================] - 15s - loss: 1.8233 - val_loss: 1.8924
Epoch 9/20
14725/14725 [==============================] - 15s - loss: 1.7575 - val_loss: 1.8987



model = Sequential()
model.add(Embedding(input_dim=len(charset), output_dim=100))
model.add(Dropout(0.5))
model.add(BatchNormalization())
model.add(GRU(256))
model.add(Dropout(0.5))
model.add(BatchNormalization())
model.add(Dense(y.shape[1], activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam')
model.fit(X, y, epochs=20, batch_size=128, validation_split=0.1)
Train on 14725 samples, validate on 1637 samples
Epoch 1/20
14725/14725 [==============================] - 17s - loss: 3.6036 - val_loss: 3.7924
Epoch 2/20
14725/14725 [==============================] - 15s - loss: 2.7765 - val_loss: 3.0022
Epoch 3/20
14725/14725 [==============================] - 15s - loss: 2.4773 - val_loss: 2.5697
Epoch 4/20
14725/14725 [==============================] - 15s - loss: 2.3218 - val_loss: 2.2606
Epoch 5/20
14725/14725 [==============================] - 15s - loss: 2.2328 - val_loss: 2.0832
Epoch 6/20
14725/14725 [==============================] - 15s - loss: 2.1748 - val_loss: 2.0248
Epoch 7/20
14725/14725 [==============================] - 15s - loss: 2.1174 - val_loss: 1.9865
Epoch 8/20
14725/14725 [==============================] - 15s - loss: 2.0617 - val_loss: 1.9640
Epoch 9/20
14725/14725 [==============================] - 15s - loss: 2.0206 - val_loss: 1.9461
Epoch 10/20
14725/14725 [==============================] - 15s - loss: 1.9758 - val_loss: 1.9334
Epoch 11/20
14725/14725 [==============================] - 15s - loss: 1.9546 - val_loss: 1.9148
Epoch 12/20
14725/14725 [==============================] - 15s - loss: 1.9045 - val_loss: 1.9121
Epoch 13/20
14725/14725 [==============================] - 15s - loss: 1.8757 - val_loss: 1.8888
Epoch 14/20
14725/14725 [==============================] - 15s - loss: 1.8437 - val_loss: 1.8874
Epoch 15/20
14725/14725 [==============================] - 15s - loss: 1.8145 - val_loss: 1.8822
Epoch 16/20
14725/14725 [==============================] - 15s - loss: 1.7805 - val_loss: 1.8785
Epoch 17/20
14725/14725 [==============================] - 15s - loss: 1.7558 - val_loss: 1.8868
Epoch 18/20
14725/14725 [==============================] - 15s - loss: 1.7218 - val_loss: 1.8670
Epoch 19/20
14725/14725 [==============================] - 15s - loss: 1.7032 - val_loss: 1.8759
Epoch 20/20
14725/14725 [==============================] - 15s - loss: 1.6832 - val_loss: 1.8834


model = Sequential()
model.add(Embedding(input_dim=len(charset), output_dim=100))
model.add(Dropout(0.5))
model.add(BatchNormalization())
model.add(GRU(256, return_sequences=True))
model.add(Dropout(0.5))
model.add(BatchNormalization())
model.add(GRU(256))
model.add(Dropout(0.5))
model.add(BatchNormalization())
model.add(Dense(y.shape[1], activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam')
model.fit(X, y, epochs=20, batch_size=128, validation_split=0.1)
Train on 14725 samples, validate on 1637 samples
Epoch 1/20
14725/14725 [==============================] - 33s - loss: 3.7814 - val_loss: 3.7282
Epoch 2/20
14725/14725 [==============================] - 29s - loss: 2.8453 - val_loss: 2.8542
Epoch 3/20
14725/14725 [==============================] - 29s - loss: 2.5178 - val_loss: 2.4434
Epoch 4/20
14725/14725 [==============================] - 29s - loss: 2.3762 - val_loss: 2.1894
Epoch 5/20
14725/14725 [==============================] - 29s - loss: 2.2896 - val_loss: 2.0862
Epoch 6/20
14725/14725 [==============================] - 29s - loss: 2.2254 - val_loss: 2.0516
Epoch 7/20
14725/14725 [==============================] - 29s - loss: 2.1565 - val_loss: 2.0133
Epoch 8/20
14725/14725 [==============================] - 29s - loss: 2.1132 - val_loss: 1.9992
Epoch 9/20
14725/14725 [==============================] - 29s - loss: 2.0798 - val_loss: 1.9881
Epoch 10/20
14725/14725 [==============================] - 29s - loss: 2.0509 - val_loss: 1.9784
Epoch 11/20
14725/14725 [==============================] - 29s - loss: 2.0198 - val_loss: 1.9618
Epoch 12/20
14725/14725 [==============================] - 29s - loss: 1.9822 - val_loss: 1.9383
Epoch 13/20
14725/14725 [==============================] - 29s - loss: 1.9437 - val_loss: 1.9300
Epoch 14/20
14725/14725 [==============================] - 29s - loss: 1.9198 - val_loss: 1.9163
Epoch 15/20
14725/14725 [==============================] - 29s - loss: 1.8989 - val_loss: 1.9160
Epoch 16/20
14725/14725 [==============================] - 29s - loss: 1.8866 - val_loss: 1.9085
Epoch 17/20
14725/14725 [==============================] - 29s - loss: 1.8493 - val_loss: 1.8965
Epoch 18/20
14725/14725 [==============================] - 29s - loss: 1.8248 - val_loss: 1.8878
Epoch 19/20
14725/14725 [==============================] - 29s - loss: 1.8037 - val_loss: 1.8870
Epoch 20/20
14725/14725 [==============================] - 29s - loss: 1.7724 - val_loss: 1.8862


model = Sequential()
model.add(Embedding(input_dim=len(charset), output_dim=100))
model.add(Dropout(0.2))
model.add(BatchNormalization())
model.add(GRU(256, return_sequences=True))
model.add(Dropout(0.2))
model.add(BatchNormalization())
model.add(GRU(256))
model.add(Dropout(0.2))
model.add(BatchNormalization())
model.add(Dense(y.shape[1], activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam')
model.fit(X, y, epochs=20, batch_size=128, validation_split=0.1)
Train on 14725 samples, validate on 1637 samples
Epoch 1/20
14725/14725 [==============================] - 32s - loss: 3.2809 - val_loss: 3.7595
Epoch 2/20
14725/14725 [==============================] - 29s - loss: 2.4379 - val_loss: 2.9869
Epoch 3/20
14725/14725 [==============================] - 29s - loss: 2.1504 - val_loss: 2.5361
Epoch 4/20
14725/14725 [==============================] - 29s - loss: 1.9887 - val_loss: 2.1294
Epoch 5/20
14725/14725 [==============================] - 29s - loss: 1.8984 - val_loss: 1.9727
Epoch 6/20
14725/14725 [==============================] - 29s - loss: 1.7892 - val_loss: 1.9264
Epoch 7/20
14725/14725 [==============================] - 29s - loss: 1.7172 - val_loss: 1.9100
Epoch 8/20
14725/14725 [==============================] - 29s - loss: 1.6361 - val_loss: 1.9124
Epoch 9/20
14725/14725 [==============================] - 29s - loss: 1.5621 - val_loss: 1.9122
Epoch 10/20
14725/14725 [==============================] - 29s - loss: 1.4863 - val_loss: 1.9045
Epoch 11/20
14725/14725 [==============================] - 29s - loss: 1.4150 - val_loss: 1.9278
Epoch 12/20
14725/14725 [==============================] - 29s - loss: 1.3691 - val_loss: 1.9181
Epoch 13/20
14725/14725 [==============================] - 29s - loss: 1.2970 - val_loss: 1.9414
Epoch 14/20
 1536/14725 [==>...........................] - ETA: 25s - loss: 1.1475
 
 
 
model = Sequential()
model.add(Embedding(input_dim=len(charset), output_dim=100))
model.add(BatchNormalization())
model.add(GRU(256))
model.add(Dropout(0.4))
model.add(BatchNormalization())
model.add(Dense(y.shape[1], activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam')
model.fit(X, y, epochs=20, batch_size=128, validation_split=0.1)
 Train on 14725 samples, validate on 1637 samples
Epoch 1/20
14725/14725 [==============================] - 17s - loss: 3.1787 - val_loss: 3.9282
Epoch 2/20
14725/14725 [==============================] - 15s - loss: 2.5070 - val_loss: 3.2479
Epoch 3/20
14725/14725 [==============================] - 15s - loss: 2.2191 - val_loss: 2.7522
Epoch 4/20
14725/14725 [==============================] - 15s - loss: 2.0637 - val_loss: 2.3331
Epoch 5/20
14725/14725 [==============================] - 15s - loss: 1.9539 - val_loss: 2.0326
Epoch 6/20
14725/14725 [==============================] - 15s - loss: 1.8622 - val_loss: 1.9440
Epoch 7/20
14725/14725 [==============================] - 15s - loss: 1.7821 - val_loss: 1.9166
Epoch 8/20
14725/14725 [==============================] - 15s - loss: 1.7169 - val_loss: 1.8996
Epoch 9/20
14725/14725 [==============================] - 15s - loss: 1.6561 - val_loss: 1.8849
Epoch 10/20
14725/14725 [==============================] - 15s - loss: 1.5910 - val_loss: 1.9032
Epoch 11/20
14725/14725 [==============================] - 15s - loss: 1.5082 - val_loss: 1.8878
Epoch 12/20
14725/14725 [==============================] - 15s - loss: 1.4513 - val_loss: 1.9252
Epoch 13/20
 7552/14725 [==============>...............] - ETA: 7s - loss: 1.3534
 
 
model = Sequential()
model.add(Embedding(input_dim=len(charset), output_dim=100))
model.add(BatchNormalization())
model.add(GRU(512))
model.add(Dropout(0.4))
model.add(BatchNormalization())
model.add(Dense(y.shape[1], activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam')
model.fit(X, y, epochs=20, batch_size=128, validation_split=0.1)
 Train on 14725 samples, validate on 1637 samples
Epoch 1/20
14725/14725 [==============================] - 23s - loss: 3.1173 - val_loss: 3.8415
Epoch 2/20
14725/14725 [==============================] - 20s - loss: 2.4202 - val_loss: 3.1512
Epoch 3/20
14725/14725 [==============================] - 20s - loss: 2.1302 - val_loss: 2.7191
Epoch 4/20
14725/14725 [==============================] - 20s - loss: 1.9435 - val_loss: 2.3341
Epoch 5/20
14725/14725 [==============================] - 20s - loss: 1.7966 - val_loss: 1.9877
Epoch 6/20
14725/14725 [==============================] - 20s - loss: 1.6621 - val_loss: 1.9349
Epoch 7/20
14725/14725 [==============================] - 20s - loss: 1.5190 - val_loss: 1.9632
Epoch 8/20
14725/14725 [==============================] - 20s - loss: 1.3925 - val_loss: 1.9735
"""


Train on 14725 samples, validate on 1637 samples
Epoch 1/13
14725/14725 [==============================] - 18s - loss: 3.1623 - val_loss: 3.9301
Epoch 2/13
14725/14725 [==============================] - 15s - loss: 2.4849 - val_loss: 3.2724
Epoch 3/13
14725/14725 [==============================] - 15s - loss: 2.2303 - val_loss: 2.7735
Epoch 4/13
14725/14725 [==============================] - 15s - loss: 2.0664 - val_loss: 2.3324
Epoch 5/13
14725/14725 [==============================] - 15s - loss: 1.9487 - val_loss: 2.0202
Epoch 6/13
14725/14725 [==============================] - 15s - loss: 1.8679 - val_loss: 1.9499
Epoch 7/13
14725/14725 [==============================] - 15s - loss: 1.7817 - val_loss: 1.9287
Epoch 8/13
14725/14725 [==============================] - 15s - loss: 1.6960 - val_loss: 1.9165
Epoch 9/13
14725/14725 [==============================] - 15s - loss: 1.6509 - val_loss: 1.9007
Epoch 10/13
14725/14725 [==============================] - 15s - loss: 1.5811 - val_loss: 1.8963
Epoch 11/13
14725/14725 [==============================] - 15s - loss: 1.5102 - val_loss: 1.8982
Epoch 12/13
14725/14725 [==============================] - 15s - loss: 1.4347 - val_loss: 1.9258
Epoch 13/13
14725/14725 [==============================] - 15s - loss: 1.3818 - val_loss: 1.9303
Out[37]:
"\nLSTM, BatchNorm\nTrain on 14929 samples, validate on 1659 samples\nEpoch 1/5\n14929/14929 [==============================] - 75s - loss: 3.0403 - val_loss: 3.4757\nEpoch 2/5\n14929/14929 [==============================] - 60s - loss: 2.3156 - val_loss: 2.9687\n\nLSTM\nTrain on 14929 samples, validate on 1659 samples\nEpoch 1/5\n14929/14929 [==============================] - 75s - loss: 3.1259 - val_loss: 2.7865\nEpoch 2/5\n14929/14929 [==============================] - 60s - loss: 2.6150 - val_loss: 2.3894\n\nCNN(5), LSTM  # faster, needs more epochs\nTrain on 14929 samples, validate on 1659 samples\nEpoch 1/5\n14929/14929 [==============================] - 42s - loss: 3.1579 - val_loss: 2.9987\nEpoch 2/5\n14929/14929 [==============================] - 26s - loss: 2.8874 - val_loss: 2.6994\nEpoch 3/5\n14929/14929 [==============================] - 26s - loss: 2.6220 - val_loss: 2.4879\nEpoch 4/5\n14929/14929 [==============================] - 26s - loss: 2.4309 - val_loss: 2.3942\nEpoch 5/5\n14929/14929 [==============================] - 26s - loss: 2.2950 - val_loss: 2.2902\n\nCNN(5), CNN(3), LSTM doesn't drop below 3.0 in 5 epochs\n\n\nEmbedding, BatchNorm, GRU, BatchNorm\nTrain on 14725 samples, validate on 1637 samples\nEpoch 1/20\n14725/14725 [==============================] - 16s - loss: 2.9240 - val_loss: 3.9516\nEpoch 2/20\n14725/14725 [==============================] - 15s - loss: 2.2447 - val_loss: 3.3667\nEpoch 3/20\n14725/14725 [==============================] - 15s - loss: 2.0054 - val_loss: 2.8011\nEpoch 4/20\n14725/14725 [==============================] - 15s - loss: 1.8388 - val_loss: 2.3477\nEpoch 5/20\n14725/14725 [==============================] - 15s - loss: 1.7122 - val_loss: 2.0196\nEpoch 6/20\n14725/14725 [==============================] - 15s - loss: 1.6069 - val_loss: 1.9417\nEpoch 7/20\n14725/14725 [==============================] - 15s - loss: 1.5044 - val_loss: 1.9541\nEpoch 8/20\n14725/14725 [==============================] - 15s - loss: 1.3987 - val_loss: 1.9512\nEpoch 9/20\n14725/14725 [==============================] - 15s - loss: 1.2940 - val_loss: 1.9921\nEpoch 10/20\n14725/14725 [==============================] - 15s - loss: 1.1850 - val_loss: 2.0424\n\nTrain on 14725 samples, validate on 1637 samples\nEpoch 1/20\n14725/14725 [==============================] - 17s - loss: 3.2577 - val_loss: 3.8892\nEpoch 2/20\n14725/14725 [==============================] - 15s - loss: 2.5444 - val_loss: 3.2364\nEpoch 3/20\n14725/14725 [==============================] - 15s - loss: 2.2915 - val_loss: 2.7205\nEpoch 4/20\n14725/14725 [==============================] - 15s - loss: 2.1258 - val_loss: 2.3477\nEpoch 5/20\n14725/14725 [==============================] - 15s - loss: 2.0219 - val_loss: 2.0588\nEpoch 6/20\n14725/14725 [==============================] - 15s - loss: 1.9386 - val_loss: 1.9478\nEpoch 7/20\n14725/14725 [==============================] - 15s - loss: 1.8762 - val_loss: 1.9152\nEpoch 8/20\n14725/14725 [==============================] - 15s - loss: 1.7994 - val_loss: 1.9076\nEpoch 9/20\n14725/14725 [==============================] - 15s - loss: 1.7224 - val_loss: 1.8829\nEpoch 10/20\n14725/14725 [==============================] - 15s - loss: 1.6783 - val_loss: 1.9007\nEpoch 11/20\n14725/14725 [==============================] - 15s - loss: 1.6154 - val_loss: 1.8910\nEpoch 12/20\n14725/14725 [==============================] - 15s - loss: 1.5485 - val_loss: 1.8920\nEpoch 13/20\n14725/14725 [==============================] - 15s - loss: 1.4844 - val_loss: 1.9198\nEpoch 14/20\n14725/14725 [==============================] - 15s - loss: 1.4291 - val_loss: 1.9193\nEpoch 15/20\n14725/14725 [==============================] - 15s - loss: 1.3670 - val_loss: 1.9295\nEpoch 16/20\n14725/14725 [==============================] - 15s - loss: 1.3028 - val_loss: 1.9752\nEpoch 17/20\n14725/14725 [==============================] - 15s - loss: 1.2321 - val_loss: 1.9969\nEpoch 18/20\n14725/14725 [==============================] - 15s - loss: 1.2159 - val_loss: 2.0431\nEpoch 19/20\n14725/14725 [==============================] - 15s - loss: 1.1391 - val_loss: 2.0709\nEpoch 20/20\n14725/14725 [==============================] - 15s - loss: 1.1321 - val_loss: 2.1172\n\n\nmodel = Sequential()\nmodel.add(Embedding(input_dim=len(charset), output_dim=100))\nmodel.add(BatchNormalization())\nmodel.add(GRU(256))\nmodel.add(Dropout(0.5))\nmodel.add(BatchNormalization())\nmodel.add(Dense(y.shape[1], activation='softmax'))\nmodel.compile(loss='categorical_crossentropy', optimizer='adam')\nmodel.fit(X, y, epochs=20, batch_size=128, validation_split=0.1)\nTrain on 14725 samples, validate on 1637 samples\nEpoch 1/20\n14725/14725 [==============================] - 17s - loss: 3.2577 - val_loss: 3.8892\nEpoch 2/20\n14725/14725 [==============================] - 15s - loss: 2.5444 - val_loss: 3.2364\nEpoch 3/20\n14725/14725 [==============================] - 15s - loss: 2.2915 - val_loss: 2.7205\nEpoch 4/20\n14725/14725 [==============================] - 15s - loss: 2.1258 - val_loss: 2.3477\nEpoch 5/20\n14725/14725 [==============================] - 15s - loss: 2.0219 - val_loss: 2.0588\nEpoch 6/20\n14725/14725 [==============================] - 15s - loss: 1.9386 - val_loss: 1.9478\nEpoch 7/20\n14725/14725 [==============================] - 15s - loss: 1.8762 - val_loss: 1.9152\nEpoch 8/20\n14725/14725 [==============================] - 15s - loss: 1.7994 - val_loss: 1.9076\nEpoch 9/20\n14725/14725 [==============================] - 15s - loss: 1.7224 - val_loss: 1.8829\nEpoch 10/20\n14725/14725 [==============================] - 15s - loss: 1.6783 - val_loss: 1.9007\nEpoch 11/20\n14725/14725 [==============================] - 15s - loss: 1.6154 - val_loss: 1.8910\nEpoch 12/20\n14725/14725 [==============================] - 15s - loss: 1.5485 - val_loss: 1.8920\nEpoch 13/20\n14725/14725 [==============================] - 15s - loss: 1.4844 - val_loss: 1.9198\nEpoch 14/20\n14725/14725 [==============================] - 15s - loss: 1.4291 - val_loss: 1.9193\nEpoch 15/20\n14725/14725 [==============================] - 15s - loss: 1.3670 - val_loss: 1.9295\nEpoch 16/20\n14725/14725 [==============================] - 15s - loss: 1.3028 - val_loss: 1.9752\nEpoch 17/20\n14725/14725 [==============================] - 15s - loss: 1.2321 - val_loss: 1.9969\nEpoch 18/20\n14725/14725 [==============================] - 15s - loss: 1.2159 - val_loss: 2.0431\nEpoch 19/20\n14725/14725 [==============================] - 15s - loss: 1.1391 - val_loss: 2.0709\nEpoch 20/20\n14725/14725 [==============================] - 15s - loss: 1.1321 - val_loss: 2.1172\n\n\nmodel = Sequential()\nmodel.add(Embedding(input_dim=len(charset), output_dim=100))\nmodel.add(GRU(256))\nmodel.add(BatchNormalization())\nmodel.add(Dropout(0.5))\nmodel.add(Dense(y.shape[1], activation='softmax'))\nmodel.compile(loss='categorical_crossentropy', optimizer='adam')\nmodel.fit(X, y, epochs=20, batch_size=128, validation_split=0.1)\nTrain on 14725 samples, validate on 1637 samples\nEpoch 1/20\n14725/14725 [==============================] - 16s - loss: 3.1731 - val_loss: 3.5648\nEpoch 2/20\n14725/14725 [==============================] - 14s - loss: 2.4964 - val_loss: 2.9875\nEpoch 3/20\n14725/14725 [==============================] - 14s - loss: 2.3446 - val_loss: 2.7695\nEpoch 4/20\n14725/14725 [==============================] - 14s - loss: 2.2928 - val_loss: 2.6010\nEpoch 5/20\n14725/14725 [==============================] - 14s - loss: 2.2642 - val_loss: 2.3900\nEpoch 6/20\n14725/14725 [==============================] - 14s - loss: 2.2373 - val_loss: 2.5023\nEpoch 7/20\n14725/14725 [==============================] - 14s - loss: 2.2186 - val_loss: 2.3780\nEpoch 8/20\n14725/14725 [==============================] - 14s - loss: 2.2029 - val_loss: 2.4928\nEpoch 9/20\n14725/14725 [==============================] - 14s - loss: 2.1852 - val_loss: 2.3480\nEpoch 10/20\n14725/14725 [==============================] - 14s - loss: 2.1745 - val_loss: 2.4801\nEpoch 11/20\n14725/14725 [==============================] - 14s - loss: 2.1563 - val_loss: 2.3951\nEpoch 12/20\n14725/14725 [==============================] - 14s - loss: 2.1391 - val_loss: 2.4133\nEpoch 13/20\n14725/14725 [==============================] - 14s - loss: 2.1192 - val_loss: 2.5896\nEpoch 14/20\n14725/14725 [==============================] - 14s - loss: 2.1020 - val_loss: 2.2692\nEpoch 15/20\n14725/14725 [==============================] - 14s - loss: 2.0770 - val_loss: 2.2179\nEpoch 16/20\n14725/14725 [==============================] - 14s - loss: 2.0643 - val_loss: 2.2822\nEpoch 17/20\n 6784/14725 [============>.................] - ETA: 7s - loss: 2.0302\n\n\nmodel = Sequential()\nmodel.add(Embedding(input_dim=len(charset), output_dim=100))\nmodel.add(Dropout(0.2))\nmodel.add(BatchNormalization())\nmodel.add(GRU(256))\nmodel.add(Dropout(0.2))\nmodel.add(BatchNormalization())\nmodel.add(Dense(y.shape[1], activation='softmax'))\nmodel.compile(loss='categorical_crossentropy', optimizer='adam')\nmodel.fit(X, y, epochs=20, batch_size=128, validation_split=0.1)\nTrain on 14725 samples, validate on 1637 samples\nEpoch 1/20\n14725/14725 [==============================] - 17s - loss: 3.1528 - val_loss: 3.9042\nEpoch 2/20\n14725/14725 [==============================] - 15s - loss: 2.4658 - val_loss: 3.2093\nEpoch 3/20\n14725/14725 [==============================] - 15s - loss: 2.2001 - val_loss: 2.6764\nEpoch 4/20\n14725/14725 [==============================] - 15s - loss: 2.0358 - val_loss: 2.2919\nEpoch 5/20\n14725/14725 [==============================] - 15s - loss: 1.9497 - val_loss: 2.0060\nEpoch 6/20\n14725/14725 [==============================] - 15s - loss: 1.8588 - val_loss: 1.9313\nEpoch 7/20\n14725/14725 [==============================] - 15s - loss: 1.7883 - val_loss: 1.9153\nEpoch 8/20\n14725/14725 [==============================] - 15s - loss: 1.7034 - val_loss: 1.9145\nEpoch 9/20\n14725/14725 [==============================] - 15s - loss: 1.6382 - val_loss: 1.8979\nEpoch 10/20\n14725/14725 [==============================] - 15s - loss: 1.5827 - val_loss: 1.8864\nEpoch 11/20\n14725/14725 [==============================] - 15s - loss: 1.5093 - val_loss: 1.8967\nEpoch 12/20\n14725/14725 [==============================] - 15s - loss: 1.4472 - val_loss: 1.9040\nEpoch 13/20\n14725/14725 [==============================] - 15s - loss: 1.3809 - val_loss: 1.9227\nEpoch 14/20\n14725/14725 [==============================] - 15s - loss: 1.3225 - val_loss: 1.9469\nEpoch 15/20\n14725/14725 [==============================] - 15s - loss: 1.2516 - val_loss: 1.9862\nEpoch 16/20\n14725/14725 [==============================] - 15s - loss: 1.2094 - val_loss: 1.9963\nEpoch 17/20\n14725/14725 [==============================] - 15s - loss: 1.1658 - val_loss: 2.0331\nEpoch 18/20\n14725/14725 [==============================] - 15s - loss: 1.0851 - val_loss: 2.0452\nEpoch 19/20\n14725/14725 [==============================] - 15s - loss: 1.0394 - val_loss: 2.0810\nEpoch 20/20\n14725/14725 [==============================] - 15s - loss: 0.9903 - val_loss: 2.1283\n\n\nmodel = Sequential()\nmodel.add(Embedding(input_dim=len(charset), output_dim=100))\nmodel.add(Dropout(0.3))\nmodel.add(BatchNormalization())\nmodel.add(GRU(256))\nmodel.add(Dropout(0.3))\nmodel.add(BatchNormalization())\nmodel.add(Dense(y.shape[1], activation='softmax'))\nmodel.compile(loss='categorical_crossentropy', optimizer='adam')\nmodel.fit(X, y, epochs=20, batch_size=128, validation_split=0.1)\nTrain on 14725 samples, validate on 1637 samples\nEpoch 1/20\n14725/14725 [==============================] - 17s - loss: 3.2991 - val_loss: 3.8902\nEpoch 2/20\n14725/14725 [==============================] - 15s - loss: 2.5672 - val_loss: 3.1627\nEpoch 3/20\n14725/14725 [==============================] - 15s - loss: 2.2731 - val_loss: 2.6340\nEpoch 4/20\n14725/14725 [==============================] - 15s - loss: 2.1316 - val_loss: 2.2594\nEpoch 5/20\n14725/14725 [==============================] - 15s - loss: 2.0249 - val_loss: 2.0159\nEpoch 6/20\n14725/14725 [==============================] - 15s - loss: 1.9571 - val_loss: 1.9456\nEpoch 7/20\n14725/14725 [==============================] - 15s - loss: 1.8789 - val_loss: 1.9213\nEpoch 8/20\n14725/14725 [==============================] - 15s - loss: 1.8233 - val_loss: 1.8924\nEpoch 9/20\n14725/14725 [==============================] - 15s - loss: 1.7575 - val_loss: 1.8987\n\n\n\nmodel = Sequential()\nmodel.add(Embedding(input_dim=len(charset), output_dim=100))\nmodel.add(Dropout(0.5))\nmodel.add(BatchNormalization())\nmodel.add(GRU(256))\nmodel.add(Dropout(0.5))\nmodel.add(BatchNormalization())\nmodel.add(Dense(y.shape[1], activation='softmax'))\nmodel.compile(loss='categorical_crossentropy', optimizer='adam')\nmodel.fit(X, y, epochs=20, batch_size=128, validation_split=0.1)\nTrain on 14725 samples, validate on 1637 samples\nEpoch 1/20\n14725/14725 [==============================] - 17s - loss: 3.6036 - val_loss: 3.7924\nEpoch 2/20\n14725/14725 [==============================] - 15s - loss: 2.7765 - val_loss: 3.0022\nEpoch 3/20\n14725/14725 [==============================] - 15s - loss: 2.4773 - val_loss: 2.5697\nEpoch 4/20\n14725/14725 [==============================] - 15s - loss: 2.3218 - val_loss: 2.2606\nEpoch 5/20\n14725/14725 [==============================] - 15s - loss: 2.2328 - val_loss: 2.0832\nEpoch 6/20\n14725/14725 [==============================] - 15s - loss: 2.1748 - val_loss: 2.0248\nEpoch 7/20\n14725/14725 [==============================] - 15s - loss: 2.1174 - val_loss: 1.9865\nEpoch 8/20\n14725/14725 [==============================] - 15s - loss: 2.0617 - val_loss: 1.9640\nEpoch 9/20\n14725/14725 [==============================] - 15s - loss: 2.0206 - val_loss: 1.9461\nEpoch 10/20\n14725/14725 [==============================] - 15s - loss: 1.9758 - val_loss: 1.9334\nEpoch 11/20\n14725/14725 [==============================] - 15s - loss: 1.9546 - val_loss: 1.9148\nEpoch 12/20\n14725/14725 [==============================] - 15s - loss: 1.9045 - val_loss: 1.9121\nEpoch 13/20\n14725/14725 [==============================] - 15s - loss: 1.8757 - val_loss: 1.8888\nEpoch 14/20\n14725/14725 [==============================] - 15s - loss: 1.8437 - val_loss: 1.8874\nEpoch 15/20\n14725/14725 [==============================] - 15s - loss: 1.8145 - val_loss: 1.8822\nEpoch 16/20\n14725/14725 [==============================] - 15s - loss: 1.7805 - val_loss: 1.8785\nEpoch 17/20\n14725/14725 [==============================] - 15s - loss: 1.7558 - val_loss: 1.8868\nEpoch 18/20\n14725/14725 [==============================] - 15s - loss: 1.7218 - val_loss: 1.8670\nEpoch 19/20\n14725/14725 [==============================] - 15s - loss: 1.7032 - val_loss: 1.8759\nEpoch 20/20\n14725/14725 [==============================] - 15s - loss: 1.6832 - val_loss: 1.8834\n\n\nmodel = Sequential()\nmodel.add(Embedding(input_dim=len(charset), output_dim=100))\nmodel.add(Dropout(0.5))\nmodel.add(BatchNormalization())\nmodel.add(GRU(256, return_sequences=True))\nmodel.add(Dropout(0.5))\nmodel.add(BatchNormalization())\nmodel.add(GRU(256))\nmodel.add(Dropout(0.5))\nmodel.add(BatchNormalization())\nmodel.add(Dense(y.shape[1], activation='softmax'))\nmodel.compile(loss='categorical_crossentropy', optimizer='adam')\nmodel.fit(X, y, epochs=20, batch_size=128, validation_split=0.1)\nTrain on 14725 samples, validate on 1637 samples\nEpoch 1/20\n14725/14725 [==============================] - 33s - loss: 3.7814 - val_loss: 3.7282\nEpoch 2/20\n14725/14725 [==============================] - 29s - loss: 2.8453 - val_loss: 2.8542\nEpoch 3/20\n14725/14725 [==============================] - 29s - loss: 2.5178 - val_loss: 2.4434\nEpoch 4/20\n14725/14725 [==============================] - 29s - loss: 2.3762 - val_loss: 2.1894\nEpoch 5/20\n14725/14725 [==============================] - 29s - loss: 2.2896 - val_loss: 2.0862\nEpoch 6/20\n14725/14725 [==============================] - 29s - loss: 2.2254 - val_loss: 2.0516\nEpoch 7/20\n14725/14725 [==============================] - 29s - loss: 2.1565 - val_loss: 2.0133\nEpoch 8/20\n14725/14725 [==============================] - 29s - loss: 2.1132 - val_loss: 1.9992\nEpoch 9/20\n14725/14725 [==============================] - 29s - loss: 2.0798 - val_loss: 1.9881\nEpoch 10/20\n14725/14725 [==============================] - 29s - loss: 2.0509 - val_loss: 1.9784\nEpoch 11/20\n14725/14725 [==============================] - 29s - loss: 2.0198 - val_loss: 1.9618\nEpoch 12/20\n14725/14725 [==============================] - 29s - loss: 1.9822 - val_loss: 1.9383\nEpoch 13/20\n14725/14725 [==============================] - 29s - loss: 1.9437 - val_loss: 1.9300\nEpoch 14/20\n14725/14725 [==============================] - 29s - loss: 1.9198 - val_loss: 1.9163\nEpoch 15/20\n14725/14725 [==============================] - 29s - loss: 1.8989 - val_loss: 1.9160\nEpoch 16/20\n14725/14725 [==============================] - 29s - loss: 1.8866 - val_loss: 1.9085\nEpoch 17/20\n14725/14725 [==============================] - 29s - loss: 1.8493 - val_loss: 1.8965\nEpoch 18/20\n14725/14725 [==============================] - 29s - loss: 1.8248 - val_loss: 1.8878\nEpoch 19/20\n14725/14725 [==============================] - 29s - loss: 1.8037 - val_loss: 1.8870\nEpoch 20/20\n14725/14725 [==============================] - 29s - loss: 1.7724 - val_loss: 1.8862\n\n\nmodel = Sequential()\nmodel.add(Embedding(input_dim=len(charset), output_dim=100))\nmodel.add(Dropout(0.2))\nmodel.add(BatchNormalization())\nmodel.add(GRU(256, return_sequences=True))\nmodel.add(Dropout(0.2))\nmodel.add(BatchNormalization())\nmodel.add(GRU(256))\nmodel.add(Dropout(0.2))\nmodel.add(BatchNormalization())\nmodel.add(Dense(y.shape[1], activation='softmax'))\nmodel.compile(loss='categorical_crossentropy', optimizer='adam')\nmodel.fit(X, y, epochs=20, batch_size=128, validation_split=0.1)\nTrain on 14725 samples, validate on 1637 samples\nEpoch 1/20\n14725/14725 [==============================] - 32s - loss: 3.2809 - val_loss: 3.7595\nEpoch 2/20\n14725/14725 [==============================] - 29s - loss: 2.4379 - val_loss: 2.9869\nEpoch 3/20\n14725/14725 [==============================] - 29s - loss: 2.1504 - val_loss: 2.5361\nEpoch 4/20\n14725/14725 [==============================] - 29s - loss: 1.9887 - val_loss: 2.1294\nEpoch 5/20\n14725/14725 [==============================] - 29s - loss: 1.8984 - val_loss: 1.9727\nEpoch 6/20\n14725/14725 [==============================] - 29s - loss: 1.7892 - val_loss: 1.9264\nEpoch 7/20\n14725/14725 [==============================] - 29s - loss: 1.7172 - val_loss: 1.9100\nEpoch 8/20\n14725/14725 [==============================] - 29s - loss: 1.6361 - val_loss: 1.9124\nEpoch 9/20\n14725/14725 [==============================] - 29s - loss: 1.5621 - val_loss: 1.9122\nEpoch 10/20\n14725/14725 [==============================] - 29s - loss: 1.4863 - val_loss: 1.9045\nEpoch 11/20\n14725/14725 [==============================] - 29s - loss: 1.4150 - val_loss: 1.9278\nEpoch 12/20\n14725/14725 [==============================] - 29s - loss: 1.3691 - val_loss: 1.9181\nEpoch 13/20\n14725/14725 [==============================] - 29s - loss: 1.2970 - val_loss: 1.9414\nEpoch 14/20\n 1536/14725 [==>...........................] - ETA: 25s - loss: 1.1475\n \n \n \nmodel = Sequential()\nmodel.add(Embedding(input_dim=len(charset), output_dim=100))\nmodel.add(BatchNormalization())\nmodel.add(GRU(256))\nmodel.add(Dropout(0.4))\nmodel.add(BatchNormalization())\nmodel.add(Dense(y.shape[1], activation='softmax'))\nmodel.compile(loss='categorical_crossentropy', optimizer='adam')\nmodel.fit(X, y, epochs=20, batch_size=128, validation_split=0.1)\n Train on 14725 samples, validate on 1637 samples\nEpoch 1/20\n14725/14725 [==============================] - 17s - loss: 3.1787 - val_loss: 3.9282\nEpoch 2/20\n14725/14725 [==============================] - 15s - loss: 2.5070 - val_loss: 3.2479\nEpoch 3/20\n14725/14725 [==============================] - 15s - loss: 2.2191 - val_loss: 2.7522\nEpoch 4/20\n14725/14725 [==============================] - 15s - loss: 2.0637 - val_loss: 2.3331\nEpoch 5/20\n14725/14725 [==============================] - 15s - loss: 1.9539 - val_loss: 2.0326\nEpoch 6/20\n14725/14725 [==============================] - 15s - loss: 1.8622 - val_loss: 1.9440\nEpoch 7/20\n14725/14725 [==============================] - 15s - loss: 1.7821 - val_loss: 1.9166\nEpoch 8/20\n14725/14725 [==============================] - 15s - loss: 1.7169 - val_loss: 1.8996\nEpoch 9/20\n14725/14725 [==============================] - 15s - loss: 1.6561 - val_loss: 1.8849\nEpoch 10/20\n14725/14725 [==============================] - 15s - loss: 1.5910 - val_loss: 1.9032\nEpoch 11/20\n14725/14725 [==============================] - 15s - loss: 1.5082 - val_loss: 1.8878\nEpoch 12/20\n14725/14725 [==============================] - 15s - loss: 1.4513 - val_loss: 1.9252\nEpoch 13/20\n 7552/14725 [==============>...............] - ETA: 7s - loss: 1.3534\n \n \nmodel = Sequential()\nmodel.add(Embedding(input_dim=len(charset), output_dim=100))\nmodel.add(BatchNormalization())\nmodel.add(GRU(512))\nmodel.add(Dropout(0.4))\nmodel.add(BatchNormalization())\nmodel.add(Dense(y.shape[1], activation='softmax'))\nmodel.compile(loss='categorical_crossentropy', optimizer='adam')\nmodel.fit(X, y, epochs=20, batch_size=128, validation_split=0.1)\n Train on 14725 samples, validate on 1637 samples\nEpoch 1/20\n14725/14725 [==============================] - 23s - loss: 3.1173 - val_loss: 3.8415\nEpoch 2/20\n14725/14725 [==============================] - 20s - loss: 2.4202 - val_loss: 3.1512\nEpoch 3/20\n14725/14725 [==============================] - 20s - loss: 2.1302 - val_loss: 2.7191\nEpoch 4/20\n14725/14725 [==============================] - 20s - loss: 1.9435 - val_loss: 2.3341\nEpoch 5/20\n14725/14725 [==============================] - 20s - loss: 1.7966 - val_loss: 1.9877\nEpoch 6/20\n14725/14725 [==============================] - 20s - loss: 1.6621 - val_loss: 1.9349\nEpoch 7/20\n14725/14725 [==============================] - 20s - loss: 1.5190 - val_loss: 1.9632\nEpoch 8/20\n14725/14725 [==============================] - 20s - loss: 1.3925 - val_loss: 1.9735\n"

In [ ]:
model.fit(X, y, epochs=5, batch_size=128, validation_split=0.1)

In [ ]:
test_author_model.summary()

In [22]:
generate(model, diversity=0.7, text="this is some test text does it really matter what it says " * 30)


----- Generating with seed: "oes it really matter what it says this is some test text does it really matter what it says this is "
oes it really matter what it says this is some test text does it really matter what it says this is 
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-22-af9aa51fe5bd> in <module>()
----> 1 generate(model, diversity=0.7, text="this is some test text does it really matter what it says "*30)

<ipython-input-7-16c3c1fabb4f> in generate(model, diversity, text)
     34                 print(sentence)
     35         preds = model.predict(x, verbose=0)[0][0]
---> 36         next_index = sample(preds, diversity)
     37         next_char = indices_char[next_index]
     38         generated += next_char

<ipython-input-7-16c3c1fabb4f> in sample(preds, temperature)
     14     exp_preds = np.exp(preds)
     15     preds = exp_preds / np.sum(exp_preds)
---> 16     probas = np.random.multinomial(1, preds, 1)
     17     return np.argmax(probas)
     18 

mtrand.pyx in mtrand.RandomState.multinomial (numpy/random/mtrand/mtrand.c:37721)()

TypeError: object of type 'numpy.float64' has no len()

In [24]:
def generate(model, diversity=0.5, text=""):
    """Generate text from a model"""
    start_index = random.randint(0, len(text) - maxlen - 1)
    generated = ''
    sentence = text[start_index: start_index + maxlen]
    generated += sentence
    print('----- Generating with seed: "' + sentence + '"')
    sys.stdout.write(generated)

    for i in range(5000):
        x = np.zeros((1, maxlen), dtype=np.int)
        for t, char in enumerate(sentence):
            try:
                x[0, t] = char_indices[char]
            except:
                print(sentence)
        preds = model.predict(x, verbose=0)[0]
        next_index = sample(preds, diversity)
        next_char = indices_char[next_index]
        generated += next_char
        sentence = sentence[1:] + next_char
        sys.stdout.write(next_char)
        sys.stdout.flush()
    return

In [26]:
generate(model, diversity=0.5, text="this is some test text does it really matter what it says " * 30)


----- Generating with seed: " what it says this is some test text does it really matter what it says this is some test text does "
 what it says this is some test text does it really matter what it says this is some test text does the chan store if the store in for Vis a singic and the places I nor for the store in find store is a gitter beat to the trist and the counders here to find. The sele the store with the storit and the chansic I was next the back the truck out. This is a git and the courder the trust and the ching store with the me to good and the next the countret to the this store is little back to the clourder the selsection for the stration's and my for probebles to have the store if friends out befould the chan net store with the park is can sele, I was not longer casteral friends. The store store is little this is this lace in findst and the inclure the selmen store in finds a befter the beet the car this store if the chan strater and closed to the counders. The strail also here in find store with the store with me and selestanding and the strorthors. So I had things a back to the mant I was not look in fried. The store in finds. The mest to the had a leng so this shore sprob food. The lent for the store for the store with the mant and the pricked out a find the chings realing and the mettreer smore with the store is later with got and the counders here for the stort and consorthing. The store store store is littely to get the onlite of the been to this shorth and I was trinks a fead a feas and my next the car the store in find store better here and class. The me of the only convenienter the the cound store. The store store is little but the only Nortar Crip and my ore also head with the things. The me so this shores and class store screet and the fings and long sometime store store is little also this is a back is this is a bittle this was small with the metr seet and my rear to was my sor the counder fead and was counders. The line for the strort and the Chrack is bak in friends and the chan in finds. The strail was come to this store is little bas in finds on the mettranter but the me store is little any the fincers and land store in findlest your for the stort office all park in things around findss. The ment store is fried was converite back the park in finds. The stores store with the counderth and check is this is a good sement and the boxt of the best thing to hand a fead and the me sell this stort of the one of the straf a feat and the chises with the only got for the stroirs and the mark is a firle a feed and the only metter slow with the stricket and my could my dere for real peating. The me something the counders to but the chan store is a Still a was a glass in finds that was conser this store shore for the strorth only regulay same but if my ere fur nite before the bands. The lane I was to gas here and the counder for the store is this is this is a bask in finds and the curont real for the store, The store in findst. The start in friends which when I gound the plation for Crome was strort and a fead all peat for your for the store and the chisies with the manity look in friends. The last in firl also but hive the was next the coure fent and the plattor for your for the store is little back to be. And the me of the stor
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-26-49291dfdfef3> in <module>()
----> 1 generate(model, diversity=0.5, text="this is some test text does it really matter what it says " * 30)

<ipython-input-24-9c3c76047201> in generate(model, diversity, text)
     15             except:
     16                 print(sentence)
---> 17         preds = model.predict(x, verbose=0)[0]
     18         next_index = sample(preds, diversity)
     19         next_char = indices_char[next_index]

~/.local/lib/python3.4/site-packages/keras/models.py in predict(self, x, batch_size, verbose)
    900         if self.model is None:
    901             self.build()
--> 902         return self.model.predict(x, batch_size=batch_size, verbose=verbose)
    903 
    904     def predict_on_batch(self, x):

~/.local/lib/python3.4/site-packages/keras/engine/training.py in predict(self, x, batch_size, verbose)
   1583         f = self.predict_function
   1584         return self._predict_loop(f, ins,
-> 1585                                   batch_size=batch_size, verbose=verbose)
   1586 
   1587     def train_on_batch(self, x, y,

~/.local/lib/python3.4/site-packages/keras/engine/training.py in _predict_loop(self, f, ins, batch_size, verbose)
   1210                 ins_batch = _slice_arrays(ins, batch_ids)
   1211 
-> 1212             batch_outs = f(ins_batch)
   1213             if not isinstance(batch_outs, list):
   1214                 batch_outs = [batch_outs]

~/.local/lib/python3.4/site-packages/keras/backend/tensorflow_backend.py in __call__(self, inputs)
   2227         session = get_session()
   2228         updated = session.run(self.outputs + [self.updates_op],
-> 2229                               feed_dict=feed_dict)
   2230         return updated[:len(self.outputs)]
   2231 

/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py in run(self, fetches, feed_dict, options, run_metadata)
    776     try:
    777       result = self._run(None, fetches, feed_dict, options_ptr,
--> 778                          run_metadata_ptr)
    779       if run_metadata:
    780         proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py in _run(self, handle, fetches, feed_dict, options, run_metadata)
    980     if final_fetches or final_targets:
    981       results = self._do_run(handle, final_targets, final_fetches,
--> 982                              feed_dict_string, options, run_metadata)
    983     else:
    984       results = []

/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py in _do_run(self, handle, target_list, fetch_list, feed_dict, options, run_metadata)
   1030     if handle is None:
   1031       return self._do_call(_run_fn, self._session, feed_dict, fetch_list,
-> 1032                            target_list, options, run_metadata)
   1033     else:
   1034       return self._do_call(_prun_fn, self._session, handle, feed_dict,

/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py in _do_call(self, fn, *args)
   1037   def _do_call(self, fn, *args):
   1038     try:
-> 1039       return fn(*args)
   1040     except errors.OpError as e:
   1041       message = compat.as_text(e.message)

/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py in _run_fn(session, feed_dict, fetch_list, target_list, options, run_metadata)
   1019         return tf_session.TF_Run(session, options,
   1020                                  feed_dict, fetch_list, target_list,
-> 1021                                  status, run_metadata)
   1022 
   1023     def _prun_fn(session, handle, feed_dict, fetch_list):

KeyboardInterrupt: 

In [ ]: