В глубоком обучении встраивание слоя звучит как загадка, пока вы не овладеете им. Поскольку слой встраивания является неотъемлемой частью нейронных сетей, важно понимать, как он работает. В этой статье я попытаюсь объяснить, что такое встраиваемый слой, для чего он нужен и как он работает, а также приведу несколько примеров кода. Итак, давайте начнем.
Что такое встраиваемый слой
Слой внедрения — один из доступных слоев в Keras. Это в основном используется в приложениях, связанных с обработкой естественного языка, таких как языковое моделирование, но его также можно использовать с другими задачами, связанными с нейронными сетями. При решении проблем NLP мы можем использовать предварительно обученные вложения слов, такие как GloVe. В качестве альтернативы мы также можем обучать наши собственные встраивания, используя слой встраивания Keras.
Необходимость встраивания
Встраивание слов можно рассматривать как альтернативу горячему кодированию наряду с уменьшением размерности.
Как мы знаем, имея дело с текстовыми данными, нам нужно преобразовать их в числа, прежде чем передавать их в любую модель машинного обучения, включая нейронные сети. Для простоты слова можно сравнить с категориальными переменными. Мы используем однократное кодирование для преобразования категориальных признаков в числа. Для этого мы создаем фиктивные функции для каждой категории и заполняем их нулями и единицами.
Точно так же, если мы используем однократное кодирование слов в текстовых данных, у нас будет фиктивный признак для каждого слова, что означает 10 000 признаков для словаря из 10 000 слов. Это неприемлемый подход к встраиванию, поскольку он требует большого пространства для хранения векторов слов и снижает эффективность модели.
Слой внедрения позволяет нам преобразовать каждое слово в вектор фиксированной длины определенного размера. Результирующий вектор является плотным и имеет реальные значения, а не только 0 и 1. Фиксированная длина векторов слов помогает нам лучше представлять слова вместе с уменьшенными размерами.
Таким образом, встраиваемый слой работает как таблица поиска. Слова являются ключами в этой таблице, а плотные векторы слов являются значениями. Чтобы лучше понять это, давайте посмотрим на реализацию слоя Keras Embedding.
Реализация в Керасе
Мы можем создать простую модель Keras, просто добавив встраивающий слой.
модель = Последовательный()
embedding_layer = Embedding (input_dim = 10, output_dim = 4, input_length = 2)
model.add(embedding_layer)
model.compile('адам','mse')
Слой внедрения имеет три параметра
input_dim : Размер словаря
output_dim : Длина вектора для каждого слова
input_length : максимальная длина последовательности
В приведенном ниже примере мы устанавливаем 10 в качестве размера словаря, так как мы будем кодировать числа от 0 до 9. Мы хотим, чтобы длина вектора слов была равна 4, поэтому output_dim устанавливается равным 4. Длина входной последовательности равна слой внедрения будет 2.
Code 1
(.env) [boris@fedora34server KERAS]$ cat testKeras01.py
from numpy import array
from tensorflow.keras.preprocessing.text import one_hot
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Flatten,Embedding,Dense
# Define 10 restaurant reviews
reviews =[
'Never coming back!',
'horrible service',
'rude waitress',
'cold food',
'horrible food!',
'awesome',
'awesome services!',
'rocks',
'poor work',
'couldn\'t have done better'
]
#Define labels
labels = array([1,1,1,1,1,0,0,0,0,0])
Vocab_size = 50
encoded_reviews = [one_hot(d,Vocab_size) for d in reviews]
print(f'encoded reviews: {encoded_reviews}')
max_length = 4
padded_reviews = pad_sequences(encoded_reviews,maxlen=max_length,padding='post')
print(padded_reviews)
model = Sequential()
embedding_layer = Embedding(input_dim=Vocab_size,output_dim=8,input_length=max_length)
model.add(embedding_layer)
model.add(Flatten())
model.add(Dense(1,activation='sigmoid'))
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['acc'])
model.fit(padded_reviews,labels,epochs=100,verbose=0)
print(model.summary())
References
https://medium.com/analytics-vidhya/understanding-embedding-layer-in-keras-bbe3ff1327ce
No comments:
Post a Comment