Шаг за шагом превратите свой набор данных в 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-е издание