前回の続き。
前回はEmbedding layerも含めて学習したが、学習済みのGloveを使う。
最初に、glove.6B.100d.txt(wordとembeddingを行単位で記述)をロードして、embedding_indexを作る。次に、imdb_reviewsデータセットのwordに対して、対応するgloveのembeddingを格納したembedding_matrixを作成。後は、modelの記述において、Embedding layerのweightsにembedding_matrixを与えて、学習しないようにTrainable=FalseとすればOK。
embedding_index = {} with open('glove.6B.100d.txt') as f: for line in f: values = line.split() word = values[0] coefs = np.asarray(values[1:], dtype='float32') embedding_index[word] = coefs embedding_matrix = np.zeros((vocab_size + 1, embedding_dim)) for word, i in word_index.items(): embedding_vector = embedding_index.get(word) if embedding_vector is not None: embedding_matrix[i] = embedding_vector # Glove is used for embedding layer. model = tf.keras.Sequential([ tf.keras.layers.Embedding(vocab_size + 1, embedding_dim, input_length=max_length, weights=[embedding_matrix], trainable=False), tf.keras.layers.Flatten(), tf.keras.layers.Dense(6, activation='relu'), tf.keras.layers.Dense(1, activation='sigmoid') ])