наконец-то! Официально выпущена официальная китайская версия документа Keras

искусственный интеллект Keras Node.js API
наконец-то! Официально выпущена официальная китайская версия документа Keras
12 января этого года автор Keras Франсуа Шолле сообщил в Твиттере, что он запустил проект документации Keras на китайском языке на GitHub из-за широкого внимания китайских читателей. А вчера Франсуа Шоле в очередной раз написал в Твиттере, что официальная документация по Keras практически завершена! Он очень благодарен за неустанные усилия переводчиков и корректоров в течение более двух месяцев и надеется, что китайские пользователи Keras будут продолжать помогать улучшать качество документа.
На этот раз выпущена официальная китайская документация Keras, которая была тщательно вычитана для улучшения общего качества. Тем не менее, проект все еще продолжается.Несмотря на то, что было выпущено много документов и руководств по использованию API, некоторые материалы еще не завершены. Фактически, задолго до того, как появилась официальная китайская документация, некоторые разработчики создали китайскую документацию Keras, и многие читатели использовали китайскую документацию, созданную MoyanZitto и другими.
  • Официальная документация Keras: https://keras.io/zh/
  • Сторонняя документация Keras: http://keras-cn.readthedocs.io/en/latest/
Ниже мы кратко представим официальный выпуск документации Keras.
Keras — это высокоуровневый API нейронной сети, написанный на Python, который может работать с TensorFlow, CNTK или Theano в качестве серверной части. Keras был разработан с упором на возможность быстрого экспериментирования. Способность воплотить свои идеи в экспериментальные результаты с минимальной задержкой — ключ к хорошему исследованию.

Выберите Keras, если у вас есть следующие требования:
  • Позволяет легко и быстро создавать прототипы (удобный для пользователя, модульный, расширяемый).
  • Поддерживаются как сверточные нейронные сети, так и рекуррентные нейронные сети, а также их комбинации.
  • Работает и переключается без проблем на CPU и GPU.
Версии Python, совместимые с Keras: Python 2.7–3.6.
Keras очень легко построить по сравнению с другими библиотеками глубокого обучения: во-первых, он предоставляет согласованный и простой API; во-вторых, он предоставляет независимые, полностью настраиваемые модули, которые составляют последовательности или графики для полных моделей; и, наконец, в качестве новых классов и функций, новый Модули легко расширяемы. Это может быть абстрактно, но, как описано в документации, мы запустили Keras даже через 30 секунд. Так что те, кто бродит вне ямы или готовится войти в яму Кераса, могут с радостью начать свои 30 секунд.

Быстрый старт: начало работы с Keras за 30 секунд

Основная структура данных Keras — это модель, способ организации сетевых слоев. Простейшей моделью является последовательная модель, которая представляет собой линейно сложенный стек из нескольких сетевых слоев. Для более сложных структур следует использовать функциональный API Keras, позволяющий строить произвольные нейросетевые графы.
Последовательная модель выглядит так:
from keras.models import Sequential

model = Sequential()
Модели можно складывать просто с помощью .add() :
from keras.layers import Dense

model.add(Dense(units=64, activation='relu', input_dim=100))
model.add(Dense(units=10, activation='softmax'))
После того, как вы закончили построение модели, вы можете использовать .compile() для настройки процесса обучения:
model.compile(loss='categorical_crossentropy',
              optimizer='sgd',
              metrics=['accuracy'])
При необходимости вы можете дополнительно настроить оптимизатор. Основной принцип Keras заключается в том, чтобы все было довольно просто, но при этом предоставляя пользователю полный контроль, когда это необходимо (конечный контроль — это простота расширяемости исходного кода).
model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.SGD(lr=0.01, momentum=0.9, nesterov=True))
Теперь вы можете перебирать обучающие данные партиями:
# x_train and y_train are Numpy arrays --just like in the Scikit-Learn API.
model.fit(x_train, y_train, epochs=5, batch_size=32)
Кроме того, вы можете вручную передать в модель пакеты данных:
model.train_on_batch(x_batch, y_batch)
Оцените производительность модели всего одной строкой кода:
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)
Или сгенерируйте прогнозы по новым данным:
classes = model.predict(x_test, batch_size=128)
Создание системы ответов на вопросы, модели классификации изображений, нейронной машины Тьюринга или любой другой модели — это очень быстро. Идеи, лежащие в основе глубокого обучения, просты, так почему же их реализация должна быть такой болезненной?

Введение

Использование моделей Keras обычно можно разделить на последовательные модели (Sequential) и функциональные API-интерфейсы Keras. Последовательные модели представляют собой линейные стеки нескольких сетевых уровней, в то время как функциональные API-интерфейсы Keras определяют сложные модели (такие как модели с несколькими выходами, ориентированные ациклические графы), или модель с общими слоями). Далее кратко описывается, как использовать две модели:

1. Последовательная модель Keras
Вы можете создать модель Sequential, передав список слоев конструктору Sequential:
from keras.models import Sequential
from keras.layers import Dense, Activation

model = Sequential([
    Dense(32, input_shape=(784,)),
    Activation('relu'),
    Dense(10),
    Activation('softmax'),
])
Слои также можно добавлять в модель с помощью метода .add():
model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))
Полная модель мультиклассификации softmax на основе Multi-Layer Perceptron (MLP) показана ниже:
import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.optimizers import SGD

# 生成虚拟数据
import numpy as np
x_train = np.random.random((1000, 20))
y_train = keras.utils.to_categorical(np.random.randint(10, size=(1000, 1)), num_classes=10)
x_test = np.random.random((100, 20))
y_test = keras.utils.to_categorical(np.random.randint(10, size=(100, 1)), num_classes=10)

model = Sequential()
# Dense(64) 是一个具有 64 个隐藏神经元的全连接层。
# 在第一层必须指定所期望的输入数据尺寸,在这里是一个 20 维的向量。
model.add(Dense(64, activation='relu', input_dim=20))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy',
              optimizer=sgd,
              metrics=['accuracy'])

model.fit(x_train, y_train,
          epochs=20,
          batch_size=128)
score = model.evaluate(x_test, y_test, batch_size=128)

2. Функциональный API Keras
Благодаря функциональному API обученные модели можно легко использовать повторно: любую модель можно рассматривать как слой и вызывать ее, передавая тензор. Обратите внимание, что при вызове модели вы повторно используете не только структуру модели, но и ее веса.
Вот хороший пример функционального API: модель с несколькими входами и выходами. Функциональные API упрощают обработку больших чередующихся потоков данных.
Рассмотрим следующую модель. Мы пытаемся предсказать, сколько ретвитов и лайков получит заголовок новости в Твиттере. Основными входными данными для модели будет сам заголовок новости, последовательность слов, но для большего интереса наша модель также добавляет другие вспомогательные входные данные для получения дополнительных данных, например, когда был опубликован заголовок новости и т. д. Модель также будет контролироваться двумя функциями потерь. Использование основной функции потерь ранее в модели является хорошим методом регуляризации для моделей глубокого обучения.
Структура модели показана на следующем рисунке:
Давайте реализуем это с помощью функционального API (подробное объяснение см. в документации на китайском языке):
from keras.layers import Input, Embedding, LSTM, Dense
from keras.models import Model

# 标题输入:接收一个含有 100 个整数的序列,每个整数在 1 到 10000 之间。
# 注意我们可以通过传递一个 `name` 参数来命名任何层。
main_input = Input(shape=(100,), dtype='int32', name='main_input')

# Embedding 层将输入序列编码为一个稠密向量的序列,每个向量维度为 512。
x = Embedding(output_dim=512, input_dim=10000, input_length=100)(main_input)

# LSTM 层把向量序列转换成单个向量,它包含整个序列的上下文信息
lstm_out = LSTM(32)(x)

auxiliary_output = Dense(1, activation='sigmoid', name='aux_output')(lstm_out)

auxiliary_input = Input(shape=(5,), name='aux_input')
x = keras.layers.concatenate([lstm_out, auxiliary_input])

# 堆叠多个全连接网络层
x = Dense(64, activation='relu')(x)
x = Dense(64, activation='relu')(x)
x = Dense(64, activation='relu')(x)

# 最后添加主要的逻辑回归层
main_output = Dense(1, activation='sigmoid', name='main_output')(x)

model = Model(inputs=[main_input, auxiliary_input], outputs=[main_output, auxiliary_output])

model.compile(optimizer='rmsprop', loss='binary_crossentropy',
              loss_weights=[1., 0.2])


model.fit([headline_data, additional_data], [labels, labels],
          epochs=50, batch_size=32)

model.compile(optimizer='rmsprop',
              loss={'main_output': 'binary_crossentropy', 'aux_output': 'binary_crossentropy'},
              loss_weights={'main_output': 1., 'aux_output': 0.2})

# 然后使用以下方式训练:
model.fit({'main_input': headline_data, 'aux_input': additional_data},
          {'main_output': labels, 'aux_output': labels},
          epochs=50, batch_size=32)

Это всего лишь простой случай. Функциональный API Keras имеет множество вариантов применения, включая лучшие визуальные модели, такие как иерархический обмен, направленные ациклические графы и остаточные сети. Читатели могут продолжить чтение документации на китайском языке, чтобы узнать больше.
Последняя часть документа описывает наиболее часто используемые функции и API в Keras, включая модели Keras, иерархические функции, предварительную обработку, функции потерь, методы оптимизации, наборы данных и визуализации. На самом деле, эти API и соответствующие им реализованные функции часто можно встретить в реальном использовании, но, конечно, нам все еще нужно понимать самые основные API. Ниже приводится краткое описание модели Keras и API уровня.Для других модулей см. оригинальную документацию на китайском языке.

Керас модель

В Keras есть два типа моделей: последовательные модели и модели, подобные моделям, которые используют функциональный API. Эти модели имеют много общих методов:
  • model.summary(): распечатать сводную информацию о модели. Это сокращенный вызов utils.print_summary.
  • model.get_config(): возвращает словарь, содержащий информацию о конфигурации модели. С помощью следующего кода модель может быть повторно создана на основе этой информации о конфигурации:
config = model.get_config()
model = Model.from_config(config)
# or, for Sequential:
model = Sequential.from_config(config)
  • model.get_weights(): возвращает список тензоров весов моделей в виде массива Numpy.
  • model.set_weights(weights): Установить вес модели из массива Nympy. Массив в списке должен иметь те же размеры, что и веса, возвращаемые функцией get_weights().
  • model.to_json(): возвращает представление модели в виде строки JSON. Обратите внимание, что это представление не включает веса, а только структуры. Вы можете повторно создать экземпляр той же модели (с повторно инициализированными весами) из строки JSON с помощью следующего кода:
from keras.models import model_from_json

json_string = model.to_json()
model = model_from_json(json_string)
  • model.to_yaml(): возвращает представление модели в виде строки YAML. Обратите внимание, что это представление не включает веса, а только структуры. Вы можете повторно создать экземпляр той же модели (с повторно инициализированными весами) из строки YAML с помощью следующего кода:
from keras.models import model_from_yaml

yaml_string = model.to_yaml()
model = model_from_yaml(yaml_string)
  • model.save_weights(filepath): Сохранить веса модели как файл HDF5.
  • model.load_weights(filepath, by_name=False): загрузить веса из файла HDF5 (созданного save_weights). По умолчанию структура модели должна быть неизменной. Если вы хотите загрузить веса в разные модели (некоторые слои одинаковы), установите by_name=True, чтобы загрузить веса этих слоев с одинаковыми именами.

Уровень Кераса

Все слои Keras имеют много общих функций:
  • layer.get_weights(): возвращает веса слоя в виде матрицы Numpy.
  • layer.set_weights(weights): установите веса слоя из матрицы Numpy (та же форма, что и на выходе get_weights).
  • layer.get_config(): возвращает словарь, содержащий конфигурацию слоя. Этот слой можно сбросить:
layer = Dense(32)
config = layer.get_config()
reconstructed_layer = Dense.from_config(config)
Если слой имеет один узел (т. е. если это не общий слой), вы можете получить его входной тензор, выходной тензор, размер ввода и размер вывода:
  • layer.input
  • layer.output
  • layer.input_shape
  • layer.output_shape
Если слой имеет несколько узлов, вы можете использовать следующие функции:
  • layer.get_input_at(node_index)
  • layer.get_output_at(node_index)
  • layer.get_input_shape_at(node_index)
  • layer.get_output_shape_at(node_index)
Это основные функции модели и иерархии Keras, и в центре документации находится эта часть, а также использование и параметры API, описанные ниже.Он включает в себя различные модули, необходимые для полной модели, включая данные, предварительную обработку, сетевую архитектуру, обучение , оценка и визуализация. Подождите. Но мы не будем освещать эту часть, потому что часто мы проверяем детали только тогда, когда сталкиваемся с неизвестными функциями.
Официальная китайская документация Keras, добро пожаловать в яму.