Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

📚 The CoCalc Library - books, templates and other resources

132928 views
License: OTHER
Kernel: Python 3

Credits: Forked from deep-learning-keras-tensorflow by Valerio Maggio

Unsupervised learning

AutoEncoders

An autoencoder, is an artificial neural network used for learning efficient codings.

The aim of an autoencoder is to learn a representation (encoding) for a set of data, typically for the purpose of dimensionality reduction.

Unsupervised learning is a type of machine learning algorithm used to draw inferences from datasets consisting of input data without labeled responses. The most common unsupervised learning method is cluster analysis, which is used for exploratory data analysis to find hidden patterns or grouping in data.

# based on: https://blog.keras.io/building-autoencoders-in-keras.html encoding_dim = 32 input_img = Input(shape=(784,)) encoded = Dense(encoding_dim, activation='relu')(input_img) decoded = Dense(784, activation='sigmoid')(encoded) autoencoder = Model(input=input_img, output=decoded) encoder = Model(input=input_img, output=encoded) encoded_input = Input(shape=(encoding_dim,)) decoder_layer = autoencoder.layers[-1] decoder = Model(input=encoded_input, output=decoder_layer(encoded_input)) autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy') (x_train, _), (x_test, _) = mnist.load_data() x_train = x_train.astype('float32') / 255. x_test = x_test.astype('float32') / 255. x_train = x_train.reshape((len(x_train), np.prod(x_train.shape[1:]))) x_test = x_test.reshape((len(x_test), np.prod(x_test.shape[1:]))) #note: x_train, x_train :) autoencoder.fit(x_train, x_train, nb_epoch=50, batch_size=256, shuffle=True, validation_data=(x_test, x_test))
Train on 60000 samples, validate on 10000 samples Epoch 1/50 60000/60000 [==============================] - 20s - loss: 0.3832 - val_loss: 0.2730 Epoch 2/50 60000/60000 [==============================] - 19s - loss: 0.2660 - val_loss: 0.2557 Epoch 3/50 60000/60000 [==============================] - 18s - loss: 0.2455 - val_loss: 0.2331 Epoch 4/50 60000/60000 [==============================] - 19s - loss: 0.2254 - val_loss: 0.2152 Epoch 5/50 60000/60000 [==============================] - 19s - loss: 0.2099 - val_loss: 0.2018 Epoch 6/50 60000/60000 [==============================] - 19s - loss: 0.1982 - val_loss: 0.1917 Epoch 7/50 60000/60000 [==============================] - 19s - loss: 0.1893 - val_loss: 0.1840 Epoch 8/50 60000/60000 [==============================] - 19s - loss: 0.1824 - val_loss: 0.1778 Epoch 9/50 60000/60000 [==============================] - 19s - loss: 0.1766 - val_loss: 0.1725 Epoch 10/50 60000/60000 [==============================] - 19s - loss: 0.1715 - val_loss: 0.1676 Epoch 11/50 60000/60000 [==============================] - 18s - loss: 0.1669 - val_loss: 0.1632 Epoch 12/50 60000/60000 [==============================] - 19s - loss: 0.1626 - val_loss: 0.1593 Epoch 13/50 60000/60000 [==============================] - 19s - loss: 0.1587 - val_loss: 0.1554 Epoch 14/50 60000/60000 [==============================] - 19s - loss: 0.1551 - val_loss: 0.1520 Epoch 15/50 60000/60000 [==============================] - 19s - loss: 0.1519 - val_loss: 0.1489 Epoch 16/50 60000/60000 [==============================] - 19s - loss: 0.1489 - val_loss: 0.1461 Epoch 17/50 60000/60000 [==============================] - 19s - loss: 0.1461 - val_loss: 0.1435 Epoch 18/50 60000/60000 [==============================] - 19s - loss: 0.1435 - val_loss: 0.1408 Epoch 19/50 60000/60000 [==============================] - 19s - loss: 0.1410 - val_loss: 0.1385 Epoch 20/50 60000/60000 [==============================] - 19s - loss: 0.1387 - val_loss: 0.1362 Epoch 21/50 60000/60000 [==============================] - 19s - loss: 0.1365 - val_loss: 0.1340 Epoch 22/50 60000/60000 [==============================] - 19s - loss: 0.1344 - val_loss: 0.1320 Epoch 23/50 60000/60000 [==============================] - 19s - loss: 0.1324 - val_loss: 0.1301 Epoch 24/50 60000/60000 [==============================] - 19s - loss: 0.1305 - val_loss: 0.1282 Epoch 25/50 60000/60000 [==============================] - 18s - loss: 0.1287 - val_loss: 0.1265 Epoch 26/50 60000/60000 [==============================] - 18s - loss: 0.1270 - val_loss: 0.1248 Epoch 27/50 60000/60000 [==============================] - 18s - loss: 0.1254 - val_loss: 0.1232 Epoch 28/50 60000/60000 [==============================] - 19s - loss: 0.1238 - val_loss: 0.1217 Epoch 29/50 60000/60000 [==============================] - 19s - loss: 0.1224 - val_loss: 0.1203 Epoch 30/50 60000/60000 [==============================] - 19s - loss: 0.1210 - val_loss: 0.1189 Epoch 31/50 60000/60000 [==============================] - 19s - loss: 0.1197 - val_loss: 0.1176 Epoch 32/50 60000/60000 [==============================] - 19s - loss: 0.1184 - val_loss: 0.1163 Epoch 33/50 60000/60000 [==============================] - 19s - loss: 0.1173 - val_loss: 0.1152 Epoch 34/50 60000/60000 [==============================] - 19s - loss: 0.1161 - val_loss: 0.1141 Epoch 35/50 60000/60000 [==============================] - 19s - loss: 0.1151 - val_loss: 0.1131 Epoch 36/50 60000/60000 [==============================] - 19s - loss: 0.1141 - val_loss: 0.1122 Epoch 37/50 60000/60000 [==============================] - 19s - loss: 0.1132 - val_loss: 0.1112 Epoch 38/50 60000/60000 [==============================] - 19s - loss: 0.1123 - val_loss: 0.1104 Epoch 39/50 60000/60000 [==============================] - 19s - loss: 0.1115 - val_loss: 0.1095 Epoch 40/50 60000/60000 [==============================] - 19s - loss: 0.1107 - val_loss: 0.1088 Epoch 41/50 60000/60000 [==============================] - 19s - loss: 0.1100 - val_loss: 0.1081 Epoch 42/50 60000/60000 [==============================] - 19s - loss: 0.1093 - val_loss: 0.1074 Epoch 43/50 60000/60000 [==============================] - 19s - loss: 0.1087 - val_loss: 0.1068 Epoch 44/50 60000/60000 [==============================] - 19s - loss: 0.1081 - val_loss: 0.1062 Epoch 45/50 60000/60000 [==============================] - 19s - loss: 0.1075 - val_loss: 0.1057 Epoch 46/50 60000/60000 [==============================] - 19s - loss: 0.1070 - val_loss: 0.1052 Epoch 47/50 60000/60000 [==============================] - 20s - loss: 0.1065 - val_loss: 0.1047 Epoch 48/50 60000/60000 [==============================] - 17s - loss: 0.1061 - val_loss: 0.1043 Epoch 49/50 60000/60000 [==============================] - 29s - loss: 0.1056 - val_loss: 0.1039 Epoch 50/50 60000/60000 [==============================] - 21s - loss: 0.1052 - val_loss: 0.1034
<keras.callbacks.History at 0x285017b8>

Testing the Autoencoder

encoded_imgs = encoder.predict(x_test) decoded_imgs = decoder.predict(encoded_imgs) n = 10 plt.figure(figsize=(20, 4)) for i in range(n): # original ax = plt.subplot(2, n, i + 1) plt.imshow(x_test[i].reshape(28, 28)) plt.gray() ax.get_xaxis().set_visible(False) ax.get_yaxis().set_visible(False) # reconstruction ax = plt.subplot(2, n, i + 1 + n) plt.imshow(decoded_imgs[i].reshape(28, 28)) plt.gray() ax.get_xaxis().set_visible(False) ax.get_yaxis().set_visible(False) plt.show()
Image in a Jupyter notebook

Sample generation with Autoencoder

encoded_imgs = np.random.rand(10,32) decoded_imgs = decoder.predict(encoded_imgs) n = 10 plt.figure(figsize=(20, 4)) for i in range(n): # generation ax = plt.subplot(2, n, i + 1 + n) plt.imshow(decoded_imgs[i].reshape(28, 28)) plt.gray() ax.get_xaxis().set_visible(False) ax.get_yaxis().set_visible(False) plt.show()
Image in a Jupyter notebook

Pretraining encoders

One of the powerful tools of auto-encoders is using the encoder to generate meaningful representation from the feature vectors.

# Use the encoder to pretrain a classifier

Natural Language Processing using Artificial Neural Networks

“In God we trust. All others must bring data.” – W. Edwards Deming, statistician

Word Embeddings

What?

Convert words to vectors in a high dimensional space. Each dimension denotes an aspect like gender, type of object / word.

"Word embeddings" are a family of natural language processing techniques aiming at mapping semantic meaning into a geometric space. This is done by associating a numeric vector to every word in a dictionary, such that the distance (e.g. L2 distance or more commonly cosine distance) between any two vectors would capture part of the semantic relationship between the two associated words. The geometric space formed by these vectors is called an embedding space.

Why?

By converting words to vectors we build relations between words. More similar the words in a dimension, more closer their scores are.

Example

W(green) = (1.2, 0.98, 0.05, ...)

W(red) = (1.1, 0.2, 0.5, ...)

Here the vector values of green and red are very similar in one dimension because they both are colours. The value for second dimension is very different because red might be depicting something negative in the training data while green is used for positiveness.

By vectorizing we are indirectly building different kind of relations between words.

Example of word2vec using gensim

from gensim.models import word2vec from gensim.models.word2vec import Word2Vec
Using gpu device 0: GeForce GTX 760 (CNMeM is enabled with initial size: 90.0% of memory, cuDNN 4007)

Reading blog post from data directory

import os import pickle
DATA_DIRECTORY = os.path.join(os.path.abspath(os.path.curdir), 'data')
male_posts = [] female_post = []
with open(os.path.join(DATA_DIRECTORY,"male_blog_list.txt"),"rb") as male_file: male_posts= pickle.load(male_file) with open(os.path.join(DATA_DIRECTORY,"female_blog_list.txt"),"rb") as female_file: female_posts = pickle.load(female_file)
print(len(female_posts)) print(len(male_posts))
2252 2611
filtered_male_posts = list(filter(lambda p: len(p) > 0, male_posts)) filtered_female_posts = list(filter(lambda p: len(p) > 0, female_posts)) posts = filtered_female_posts + filtered_male_posts
print(len(filtered_female_posts), len(filtered_male_posts), len(posts))
2247 2595 4842

Word2Vec

w2v = Word2Vec(size=200, min_count=1) w2v.build_vocab(map(lambda x: x.split(), posts[:100]), )
w2v.vocab
(Output Hidden)
w2v.similarity('I', 'My')
0.082851942583535218
print(posts[5]) w2v.similarity('ring', 'husband')
I've tried starting blog after blog and it just never feels right. Then I read today that it feels strange to most people, but the more you do it the better it gets (hmm, sounds suspiciously like something else!) so I decided to give it another try. My husband bought me a notepad at urlLink McNally (the best bookstore in Western Canada) with that title and a picture of a 50s housewife grinning desperately. Each page has something funny like "New curtains! Hurrah!". For some reason it struck me as absolutely hilarious and has stuck in my head ever since. What were those women thinking?
0.037229111896779618
w2v.similarity('ring', 'housewife')
0.11547398696865138
w2v.similarity('women', 'housewife') # Diversity friendly
-0.14627530812290576

Doc2Vec

The same technique of word2vec is extrapolated to documents. Here, we do everything done in word2vec + we vectorize the documents too

import numpy as np
# 0 for male, 1 for female y_posts = np.concatenate((np.zeros(len(filtered_male_posts)), np.ones(len(filtered_female_posts))))
len(y_posts)
4842

Convolutional Neural Networks for Sentence Classification

Train convolutional network for sentiment analysis. Based on "Convolutional Neural Networks for Sentence Classification" by Yoon Kim http://arxiv.org/pdf/1408.5882v2.pdf

For 'CNN-non-static' gets to 82.1% after 61 epochs with following settings: embedding_dim = 20 filter_sizes = (3, 4) num_filters = 3 dropout_prob = (0.7, 0.8) hidden_dims = 100

For 'CNN-rand' gets to 78-79% after 7-8 epochs with following settings: embedding_dim = 20 filter_sizes = (3, 4) num_filters = 150 dropout_prob = (0.25, 0.5) hidden_dims = 150

For 'CNN-static' gets to 75.4% after 7 epochs with following settings: embedding_dim = 100 filter_sizes = (3, 4) num_filters = 150 dropout_prob = (0.25, 0.5) hidden_dims = 150

  • it turns out that such a small data set as "Movie reviews with one sentence per review" (Pang and Lee, 2005) requires much smaller network than the one introduced in the original article:

  • embedding dimension is only 20 (instead of 300; 'CNN-static' still requires ~100)

  • 2 filter sizes (instead of 3)

  • higher dropout probabilities and

  • 3 filters per filter size is enough for 'CNN-non-static' (instead of 100)

  • embedding initialization does not require prebuilt Google Word2Vec data. Training Word2Vec on the same "Movie reviews" data set is enough to achieve performance reported in the article (81.6%)

** Another distinct difference is slidind MaxPooling window of length=2 instead of MaxPooling over whole feature map as in the article

import numpy as np import data_helpers from w2v import train_word2vec from keras.models import Sequential, Model from keras.layers import (Activation, Dense, Dropout, Embedding, Flatten, Input, Merge, Convolution1D, MaxPooling1D) np.random.seed(2)
Using gpu device 0: GeForce GTX 760 (CNMeM is enabled with initial size: 90.0% of memory, cuDNN 4007) Using Theano backend.

Parameters

Model Variations. See Kim Yoon's Convolutional Neural Networks for Sentence Classification, Section 3 for detail.

model_variation = 'CNN-rand' # CNN-rand | CNN-non-static | CNN-static print('Model variation is %s' % model_variation)
Model variation is CNN-rand
# Model Hyperparameters sequence_length = 56 embedding_dim = 20 filter_sizes = (3, 4) num_filters = 150 dropout_prob = (0.25, 0.5) hidden_dims = 150
# Training parameters batch_size = 32 num_epochs = 100 val_split = 0.1
# Word2Vec parameters, see train_word2vec min_word_count = 1 # Minimum word count context = 10 # Context window size

Data Preparation

# Load data print("Loading data...") x, y, vocabulary, vocabulary_inv = data_helpers.load_data() if model_variation=='CNN-non-static' or model_variation=='CNN-static': embedding_weights = train_word2vec(x, vocabulary_inv, embedding_dim, min_word_count, context) if model_variation=='CNN-static': x = embedding_weights[0][x] elif model_variation=='CNN-rand': embedding_weights = None else: raise ValueError('Unknown model variation')
Loading data...
# Shuffle data shuffle_indices = np.random.permutation(np.arange(len(y))) x_shuffled = x[shuffle_indices] y_shuffled = y[shuffle_indices].argmax(axis=1)
print("Vocabulary Size: {:d}".format(len(vocabulary)))
Vocabulary Size: 18765

Building CNN Model

graph_in = Input(shape=(sequence_length, embedding_dim)) convs = [] for fsz in filter_sizes: conv = Convolution1D(nb_filter=num_filters, filter_length=fsz, border_mode='valid', activation='relu', subsample_length=1)(graph_in) pool = MaxPooling1D(pool_length=2)(conv) flatten = Flatten()(pool) convs.append(flatten) if len(filter_sizes)>1: out = Merge(mode='concat')(convs) else: out = convs[0] graph = Model(input=graph_in, output=out) # main sequential model model = Sequential() if not model_variation=='CNN-static': model.add(Embedding(len(vocabulary), embedding_dim, input_length=sequence_length, weights=embedding_weights)) model.add(Dropout(dropout_prob[0], input_shape=(sequence_length, embedding_dim))) model.add(graph) model.add(Dense(hidden_dims)) model.add(Dropout(dropout_prob[1])) model.add(Activation('relu')) model.add(Dense(1)) model.add(Activation('sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy']) # Training model # ================================================== model.fit(x_shuffled, y_shuffled, batch_size=batch_size, nb_epoch=num_epochs, validation_split=val_split, verbose=2)
Train on 9595 samples, validate on 1067 samples Epoch 1/100 1s - loss: 0.6516 - acc: 0.6005 - val_loss: 0.5692 - val_acc: 0.7151 Epoch 2/100 1s - loss: 0.4556 - acc: 0.7896 - val_loss: 0.5154 - val_acc: 0.7573 Epoch 3/100 1s - loss: 0.3556 - acc: 0.8532 - val_loss: 0.5050 - val_acc: 0.7816 Epoch 4/100 1s - loss: 0.2978 - acc: 0.8779 - val_loss: 0.5335 - val_acc: 0.7901 Epoch 5/100 1s - loss: 0.2599 - acc: 0.8972 - val_loss: 0.5592 - val_acc: 0.7769 Epoch 6/100 1s - loss: 0.2248 - acc: 0.9112 - val_loss: 0.5559 - val_acc: 0.7685 Epoch 7/100 1s - loss: 0.1994 - acc: 0.9219 - val_loss: 0.5760 - val_acc: 0.7704 Epoch 8/100 1s - loss: 0.1801 - acc: 0.9326 - val_loss: 0.6014 - val_acc: 0.7788 Epoch 9/100 1s - loss: 0.1472 - acc: 0.9449 - val_loss: 0.6637 - val_acc: 0.7751 Epoch 10/100 1s - loss: 0.1269 - acc: 0.9537 - val_loss: 0.7281 - val_acc: 0.7563 Epoch 11/100 1s - loss: 0.1123 - acc: 0.9592 - val_loss: 0.7452 - val_acc: 0.7788 Epoch 12/100 1s - loss: 0.0897 - acc: 0.9658 - val_loss: 0.8504 - val_acc: 0.7591 Epoch 13/100 1s - loss: 0.0811 - acc: 0.9723 - val_loss: 0.8935 - val_acc: 0.7573 Epoch 14/100 1s - loss: 0.0651 - acc: 0.9764 - val_loss: 0.8738 - val_acc: 0.7685 Epoch 15/100 1s - loss: 0.0540 - acc: 0.9809 - val_loss: 0.9407 - val_acc: 0.7648 Epoch 16/100 1s - loss: 0.0408 - acc: 0.9857 - val_loss: 1.1880 - val_acc: 0.7638 Epoch 17/100 1s - loss: 0.0341 - acc: 0.9886 - val_loss: 1.2878 - val_acc: 0.7638 Epoch 18/100 1s - loss: 0.0306 - acc: 0.9901 - val_loss: 1.4448 - val_acc: 0.7573 Epoch 19/100 1s - loss: 0.0276 - acc: 0.9917 - val_loss: 1.5300 - val_acc: 0.7591 Epoch 20/100 1s - loss: 0.0249 - acc: 0.9917 - val_loss: 1.4825 - val_acc: 0.7666 Epoch 21/100 1s - loss: 0.0220 - acc: 0.9937 - val_loss: 1.4357 - val_acc: 0.7601 Epoch 22/100 1s - loss: 0.0188 - acc: 0.9945 - val_loss: 1.4081 - val_acc: 0.7657 Epoch 23/100 1s - loss: 0.0182 - acc: 0.9954 - val_loss: 1.7145 - val_acc: 0.7610 Epoch 24/100 1s - loss: 0.0129 - acc: 0.9964 - val_loss: 1.7047 - val_acc: 0.7704 Epoch 25/100 1s - loss: 0.0064 - acc: 0.9981 - val_loss: 1.9119 - val_acc: 0.7629 Epoch 26/100 1s - loss: 0.0108 - acc: 0.9969 - val_loss: 1.8306 - val_acc: 0.7704 Epoch 27/100 1s - loss: 0.0105 - acc: 0.9973 - val_loss: 1.9624 - val_acc: 0.7619 Epoch 28/100 1s - loss: 0.0112 - acc: 0.9973 - val_loss: 1.8552 - val_acc: 0.7694 Epoch 29/100 1s - loss: 0.0110 - acc: 0.9968 - val_loss: 1.8585 - val_acc: 0.7657 Epoch 30/100 1s - loss: 0.0071 - acc: 0.9983 - val_loss: 2.0571 - val_acc: 0.7694 Epoch 31/100 1s - loss: 0.0089 - acc: 0.9975 - val_loss: 2.0361 - val_acc: 0.7629 Epoch 32/100 1s - loss: 0.0074 - acc: 0.9978 - val_loss: 2.0010 - val_acc: 0.7648 Epoch 33/100 1s - loss: 0.0074 - acc: 0.9981 - val_loss: 2.0995 - val_acc: 0.7498 Epoch 34/100 1s - loss: 0.0125 - acc: 0.9971 - val_loss: 2.2003 - val_acc: 0.7610 Epoch 35/100 1s - loss: 0.0074 - acc: 0.9981 - val_loss: 2.1526 - val_acc: 0.7582 Epoch 36/100 1s - loss: 0.0068 - acc: 0.9984 - val_loss: 2.1754 - val_acc: 0.7648 Epoch 37/100 1s - loss: 0.0065 - acc: 0.9979 - val_loss: 2.0810 - val_acc: 0.7498 Epoch 38/100 1s - loss: 0.0078 - acc: 0.9980 - val_loss: 2.3443 - val_acc: 0.7460 Epoch 39/100 1s - loss: 0.0038 - acc: 0.9991 - val_loss: 2.1696 - val_acc: 0.7629 Epoch 40/100 1s - loss: 0.0062 - acc: 0.9985 - val_loss: 2.2752 - val_acc: 0.7545 Epoch 41/100 1s - loss: 0.0044 - acc: 0.9985 - val_loss: 2.3457 - val_acc: 0.7535 Epoch 42/100 1s - loss: 0.0066 - acc: 0.9985 - val_loss: 2.1172 - val_acc: 0.7629 Epoch 43/100 1s - loss: 0.0052 - acc: 0.9987 - val_loss: 2.3550 - val_acc: 0.7619 Epoch 44/100 1s - loss: 0.0024 - acc: 0.9993 - val_loss: 2.3832 - val_acc: 0.7610 Epoch 45/100 1s - loss: 0.0042 - acc: 0.9989 - val_loss: 2.4242 - val_acc: 0.7648 Epoch 46/100 1s - loss: 0.0048 - acc: 0.9990 - val_loss: 2.4529 - val_acc: 0.7563 Epoch 47/100 1s - loss: 0.0036 - acc: 0.9994 - val_loss: 2.8412 - val_acc: 0.7282 Epoch 48/100 1s - loss: 0.0037 - acc: 0.9991 - val_loss: 2.4515 - val_acc: 0.7619 Epoch 49/100 1s - loss: 0.0031 - acc: 0.9991 - val_loss: 2.4849 - val_acc: 0.7676 Epoch 50/100 1s - loss: 0.0078 - acc: 0.9990 - val_loss: 2.5083 - val_acc: 0.7563 Epoch 51/100 1s - loss: 0.0105 - acc: 0.9981 - val_loss: 2.3538 - val_acc: 0.7601 Epoch 52/100 1s - loss: 0.0076 - acc: 0.9986 - val_loss: 2.4405 - val_acc: 0.7685 Epoch 53/100 1s - loss: 0.0043 - acc: 0.9991 - val_loss: 2.5753 - val_acc: 0.7591 Epoch 54/100 1s - loss: 0.0044 - acc: 0.9989 - val_loss: 2.5550 - val_acc: 0.7582 Epoch 55/100 1s - loss: 0.0034 - acc: 0.9994 - val_loss: 2.6361 - val_acc: 0.7591 Epoch 56/100 1s - loss: 0.0041 - acc: 0.9994 - val_loss: 2.6753 - val_acc: 0.7563 Epoch 57/100 1s - loss: 0.0042 - acc: 0.9990 - val_loss: 2.6464 - val_acc: 0.7601 Epoch 58/100 1s - loss: 0.0037 - acc: 0.9992 - val_loss: 2.6616 - val_acc: 0.7582 Epoch 59/100 1s - loss: 0.0060 - acc: 0.9990 - val_loss: 2.6052 - val_acc: 0.7619 Epoch 60/100 1s - loss: 0.0051 - acc: 0.9990 - val_loss: 2.7033 - val_acc: 0.7498 Epoch 61/100 1s - loss: 0.0034 - acc: 0.9994 - val_loss: 2.7142 - val_acc: 0.7526 Epoch 62/100 1s - loss: 0.0047 - acc: 0.9994 - val_loss: 2.7656 - val_acc: 0.7591 Epoch 63/100 1s - loss: 0.0083 - acc: 0.9990 - val_loss: 2.7971 - val_acc: 0.7526 Epoch 64/100 1s - loss: 0.0046 - acc: 0.9992 - val_loss: 2.6585 - val_acc: 0.7545 Epoch 65/100 1s - loss: 0.0062 - acc: 0.9989 - val_loss: 2.6194 - val_acc: 0.7535 Epoch 66/100 1s - loss: 0.0062 - acc: 0.9993 - val_loss: 2.6255 - val_acc: 0.7694 Epoch 67/100 1s - loss: 0.0036 - acc: 0.9990 - val_loss: 2.6384 - val_acc: 0.7582 Epoch 68/100 1s - loss: 0.0066 - acc: 0.9991 - val_loss: 2.6743 - val_acc: 0.7648 Epoch 69/100 1s - loss: 0.0030 - acc: 0.9995 - val_loss: 2.8236 - val_acc: 0.7535 Epoch 70/100 1s - loss: 0.0048 - acc: 0.9993 - val_loss: 2.7829 - val_acc: 0.7610 Epoch 71/100 1s - loss: 0.0062 - acc: 0.9990 - val_loss: 2.6402 - val_acc: 0.7573 Epoch 72/100 1s - loss: 0.0037 - acc: 0.9992 - val_loss: 2.9089 - val_acc: 0.7526 Epoch 73/100 1s - loss: 0.0069 - acc: 0.9985 - val_loss: 2.7071 - val_acc: 0.7535 Epoch 74/100 1s - loss: 0.0033 - acc: 0.9995 - val_loss: 2.6727 - val_acc: 0.7601 Epoch 75/100 1s - loss: 0.0069 - acc: 0.9990 - val_loss: 2.6967 - val_acc: 0.7601 Epoch 76/100 1s - loss: 0.0089 - acc: 0.9989 - val_loss: 2.7479 - val_acc: 0.7666 Epoch 77/100 1s - loss: 0.0046 - acc: 0.9994 - val_loss: 2.7192 - val_acc: 0.7629 Epoch 78/100 1s - loss: 0.0069 - acc: 0.9989 - val_loss: 2.7173 - val_acc: 0.7629 Epoch 79/100 1s - loss: 8.6550e-04 - acc: 0.9998 - val_loss: 2.7283 - val_acc: 0.7601 Epoch 80/100 1s - loss: 0.0011 - acc: 0.9995 - val_loss: 2.8405 - val_acc: 0.7629 Epoch 81/100 1s - loss: 0.0040 - acc: 0.9994 - val_loss: 2.8725 - val_acc: 0.7619 Epoch 82/100 1s - loss: 0.0055 - acc: 0.9992 - val_loss: 2.8490 - val_acc: 0.7601 Epoch 83/100 1s - loss: 0.0059 - acc: 0.9989 - val_loss: 2.7838 - val_acc: 0.7545 Epoch 84/100 1s - loss: 0.0054 - acc: 0.9994 - val_loss: 2.8706 - val_acc: 0.7526 Epoch 85/100 1s - loss: 0.0060 - acc: 0.9992 - val_loss: 2.9374 - val_acc: 0.7516 Epoch 86/100 1s - loss: 0.0087 - acc: 0.9982 - val_loss: 2.7966 - val_acc: 0.7573 Epoch 87/100 1s - loss: 0.0084 - acc: 0.9991 - val_loss: 2.8620 - val_acc: 0.7619 Epoch 88/100 1s - loss: 0.0053 - acc: 0.9990 - val_loss: 2.8450 - val_acc: 0.7601 Epoch 89/100 1s - loss: 0.0054 - acc: 0.9990 - val_loss: 2.8303 - val_acc: 0.7629 Epoch 90/100 1s - loss: 0.0073 - acc: 0.9991 - val_loss: 2.8474 - val_acc: 0.7657 Epoch 91/100 1s - loss: 0.0037 - acc: 0.9994 - val_loss: 3.0151 - val_acc: 0.7432 Epoch 92/100 1s - loss: 0.0017 - acc: 0.9999 - val_loss: 2.9555 - val_acc: 0.7582 Epoch 93/100 1s - loss: 0.0080 - acc: 0.9991 - val_loss: 2.9178 - val_acc: 0.7554 Epoch 94/100 1s - loss: 0.0078 - acc: 0.9991 - val_loss: 2.8724 - val_acc: 0.7582 Epoch 95/100 1s - loss: 0.0012 - acc: 0.9997 - val_loss: 2.9582 - val_acc: 0.7545 Epoch 96/100 1s - loss: 0.0058 - acc: 0.9989 - val_loss: 2.8944 - val_acc: 0.7479 Epoch 97/100 1s - loss: 0.0094 - acc: 0.9985 - val_loss: 2.7146 - val_acc: 0.7516 Epoch 98/100 1s - loss: 0.0044 - acc: 0.9993 - val_loss: 2.9052 - val_acc: 0.7498 Epoch 99/100 1s - loss: 0.0030 - acc: 0.9995 - val_loss: 3.1474 - val_acc: 0.7470 Epoch 100/100 1s - loss: 0.0051 - acc: 0.9990 - val_loss: 3.1746 - val_acc: 0.7451
<keras.callbacks.History at 0x7f78362ae400>

Another Example

Using Keras + GloVe - Global Vectors for Word Representation

Using pre-trained word embeddings in a Keras model

Reference: https://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html