У багатьох бібліотеках нейронної мережі є "вбудовувальні шари", як у Кераса або Лазанья .
Я не впевнений, що розумію його функцію, незважаючи на те, що я читав документацію. Наприклад, у документації Keras написано:
Перетворіть додатні цілі числа (індекси) у вектори денс фіксованого розміру, наприклад. [[4], [20]] -> [[0,25, 0,1], [0,6, -0,2]]
Чи могла б людина, яка знає, пояснити, що вона робить, і коли ви це використаєте?
EDIT: Що стосується вставки в документацію, з документації не потрібно багато вставити, звідси і моє запитання. Я не розумію трансформації, яку вона робить, і чому її слід використовувати.
У будь-якому випадку це пояснюється в Керасі:
Вбудовування
keras.layers.embeddings.Embedding (input_dim, output_dim, init = 'рівномірний', input_length = Немає, ваги = Ні, W_regularizer = Ні, W_constraint = Ні, mask_zero = Неправильно) Перетворити додатні цілі числа (індекси) у вектори денс фіксованого розміру , напр. [[4], [20]] -> [[0,25, 0,1], [0,6, -0,2]]
Форма вводу: 2D тензор з формою: (nb_зразки, послідовність_ довжина). Форма виводу: 3D-тензор із формою: (nb_зразки, довжина_ послідовності, вихід_dim). Аргументи:
input_dim: int> = 0. Розмір лексики, тобто. 1 + максимальний цілий індекс, що виникає у вхідних даних. output_dim: int> = 0. Розмір щільного вбудовування
І ось, як це пояснено в Лазаньї:
Шар для вбудовування слів. Вхід повинен бути цілочисельною змінною тензора.
Параметри: вхідні: екземпляр шару або кортеж
Шар, що подається в цей шар, або очікувана форма введення.
input_size: int
Кількість різних вкладок. Останнє вбудовування матиме індекс input_size - 1.
output_size: int
Розмір кожного вбудовування.
W: Theano має загальну змінну, вирази, нумерований масив або дзвонить
Початкове значення, вираз або ініціалізатор матриці вбудовування. Це має бути матриця з формою (input_size, output_size). Додаткову інформацію див. У розділі lasagne.utils.create_param ().
Приклади
>>> from lasagne.layers import EmbeddingLayer, InputLayer, get_output >>> import theano >>> x = T.imatrix() >>> l_in = InputLayer((3, )) >>> W = np.arange(3*5).reshape((3, 5)).astype('float32') >>> l1 = EmbeddingLayer(l_in, input_size=3, output_size=5, W=W) >>> output = get_output(l1, x) >>> f = theano.function([x], output) >>> x_test = np.array([[0, 2], [1, 2]]).astype('int32') >>> f(x_test) array([[[ 0., 1., 2., 3., 4.], [ 10., 11., 12., 13., 14.]], [[ 5., 6., 7., 8., 9.], [ 10., 11., 12., 13., 14.]]], dtype=float32)