Шаг за шагом превратите свой набор данных в TensorFlow для начинающих

Это так сбивает с толку при обучении ваших данных с помощью TensorFlow, видеть ошибки, показывающие формы или dtype, неправильно. Это моя заметка, в которой я пытаюсь организовать набор данных tf простым способом для классификации обзоров фильмов.

В этой статье я собираюсь иметь дело с Большим набором данных обзора фильмов и обучать модель Keras.models.Sequential, которая представляет собой простую модель стека слоев.

Мои шаги:

1. Загрузите набор данных

2. Создайте tf.data.Dataset для ввода

3. Создайте слой TextVectorization (включая токенизацию и отступы)

4. Создайте мешок слов

5. Создайте модель

6. Подгонка и обучение модели

Загрузить набор данных

Начав с проверки файлов в zip-файле, мы можем использовать os.walk(filepath). Тогда у нас будет что-то вроде этого:

/root/.keras/datasets/aclImdb [‘imdb.vocab’, ‘imdbEr.txt’, ‘README’]

/root/.keras/datasets/aclImdb/train [‘labeledBow.feat’, ‘unsupBow.feat’, ‘urls_neg.txt’, ‘urls_unsup.txt’, ‘urls_pos.txt’]

Все файлы находятся в списках в своих папках. Мы будем использовать обзоры в этих 4 папках, обучающие и тестовые наборы данных с положительной и отрицательной семантикой соответственно.

/root/.keras/наборы данных/aclImdb/train/pos

/root/.keras/наборы данных/aclImdb/train/neg

/root/.keras/наборы данных/aclImdb/test/pos

/root/.keras/наборы данных/aclImdb/train/pos

Сделайте 4 пути. Все они содержат 12500 отзывов. (12500, 12500, 12500, 12500)

Создайте набор данных TensorFlow, используя tf.data.TextLineDataset

Для упрощения я не делаю здесь функцию. Мы можем напрямую поместить список путей в tf.data.TexLineDataset. Не забудьте преобразовать пути в строковый формат. Вот что мы делаем:

1. Передать пути в tf.data.TexLineDataset() и сгенерировать 6 tf.data.Dataset

2. Добавьте метки в наборы данных, используя метод tf.data.Dataset.map(). 0 для отрицательного, 1 для положительного.

3. Объедините отрицательную и положительную сторону, используя tf.data.Dataset.concatenate().

4. Перетасуйте тренировочный набор, создайте пакет и выполните предварительную выборку всех трех наборов. (мы также можем пока пропустить prefetcf)

‹Формы PrefetchDataset: ((Нет,), (Нет,)), типы: (tf.string, tf.int32)›

Обработка отзывов

Мы делаем простую tf.constant, чтобы убедиться, что наши шаги верны, а затем создаем функцию.

После preprocess_word(X_example) для простого примера это должно выглядеть так:

‹tf.Tensor: shape=(3, 50), dtype=string, numpy= array([[b"Это", b'a', b'отлично', b'отлично', b'фильм!', b'I', b'l', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad› ', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›' , b'‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b '‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b' ‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹ pad›', b'‹pad›'], [b'Это', b'было', b'ужасно,', b'бегите', b'прочь!!!', b'‹pad›', b '‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b' ‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹ pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad ›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad› ', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›' , b'‹pad›', b'‹pad›', b'‹pad›', b'‹p ad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’], [b’I’, b”не”, b’get’ , b'it!!', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b '‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›', b' ‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹ pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad ›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad›’, b’‹pad› ', b'‹pad›', b'‹pad›', b'‹pad›', b'‹pad›']], dtype=object)›

Создайте слой TextVectorization

1. получить весь словарный запас по частоте слов

2. сделать тензор слова и индекса для создания инициализатора

3. сделать таблицу

Частота слов: используйте 1000 лучших слов в качестве словарного запаса.

Затем мы выведем список самых частых слов max_size (сейчас установим 1000), следя за тем, чтобы ‹pad› был первым.

Создайте текстовый векторный слой

искать индекс каждого слова в словаре

Мы должны создать класс текстового вектора и адаптировать его, прежде чем использовать в нашей модели.

Мешок слов

Это также слой, который нам нужно добавить к нашей модели. Это может позволить вам получить сводку по количеству слов. Например,

tf.constant([[1, 3, 1, 0, 0], [2, 2, 0, 0, 0]])

мы подсчитываем вхождение и получаем это (не результат)

[[ 0:2 , 1: 2 , 2:0 , 3:1 ] , [ 0:3 , 1:0 , 2:2 , 3: 0 ] ]

удалить 0 (‹pad›) , так что [[2., 0., 1.] , [0., 2., 0.,]]

Создайте класс, чтобы добавить его в модель позже, и мы передадим наши данные в модель.

Суммируйте и обучите модель

Без тонкой настройки параметра мы могли бы получить точность около 0,73.

Epoch 1/5
782/782 [==============================] - 12s 15ms/step - loss: 0.1737 - accuracy: 0.9498 - val_loss: 0.6392 - val_accuracy: 0.7236
Epoch 2/5
782/782 [==============================] - 12s 15ms/step - loss: 0.1060 - accuracy: 0.9794 - val_loss: 0.7092 - val_accuracy: 0.7214
Epoch 3/5
782/782 [==============================] - 12s 15ms/step - loss: 0.0605 - accuracy: 0.9944 - val_loss: 0.7724 - val_accuracy: 0.7258
Epoch 4/5
782/782 [==============================] - 12s 15ms/step - loss: 0.0327 - accuracy: 0.9989 - val_loss: 0.8467 - val_accuracy: 0.7179
Epoch 5/5
782/782 [==============================] - 12s 15ms/step - loss: 0.0177 - accuracy: 0.9998 - val_loss: 0.9208 - val_accuracy: 0.7253
<tensorflow.python.keras.callbacks.History at 0x7fb437eb2d68>

В следующей статье я попытаюсь обобщить свои заметки по обработке данных изображений для обучения с использованием TensorFlow и Keras.

Справочник: Практическое машинное обучение с помощью Scikit-Learn, Keras и TensorFlow: концепции, инструменты и методы создания интеллектуальных систем, 2-е издание