Руководство для участников TensorLayer
Приглашаем вас принять участие в развитии TensorLayer! Если у вас есть идеи по улучшению, отправьте нам запросы на вытягивание. Вы можете реализовать свои улучшения в своей ветке.
Мы ценим вклад как в виде добавления или улучшения примеров, так и в расширении или исправлении основной библиотеки. Чтобы внести свой вклад, вам необходимо следовать стилю кодирования pep8 и стилю документации numpydoc. Мы полагаемся на непрерывную интеграцию (CI) для проверки коммитов. Для обеспечения прохождения тестов CI используются следующие инструменты:
Вы можете просто запустить
make format
чтобы применить эти инструменты перед отправкой PR.
# Сначала клонируйте репозиторий и измените текущий каталог на только что клонированный репозиторий
git clone https://github.com/zsdonghao/tensorlayer2.git
cd tensorlayer2
# Установите virtualenv, если это необходимо
pip install virtualenv
# Затем создайте виртуальное окружение с именем `venv`
virtualenv venv
# Активируйте виртуальное окружение
## Linux:
source venv/bin/activate
## Windows:
venv\Scripts\activate.bat
# ============= ЕСЛИ ТЕНЗОРНЫЙ ПОТОК ЕЩЕ НЕ УСТАНОВЛЕН ============= #
# базовая установка
pip install .
# продвинутая: для машины **без** графического процессора NVIDIA
pip install -e ".[all_cpu_dev]"
# продвинутая: для машины **с** графическим процессором NVIDIA
pip install -e ".[all_gpu_dev]"
Запустите модульные тесты для всего репозитория:
# установите pytest
pip install pytest
# запустите pytest
pytest
Запуск модульных тестов вашего кода на вашем реализованном модуле:
# установить покрытие
pip install coverage
cd /path/to/your/unittest/code
# Например: cd tests/layers/
# запустить модульный тест
coverage run --source myproject.module -m unittest discover
# Например: coverage run --source tensorlayer.layers -m unittest discover
# создать отчет в формате html
coverage html
Даже если вы следуете стилю документации numpydoc при написании кода, это не гарантирует, что эти строки появятся в онлайн-документации TensorLayer. Вам необходимо дополнительно изменить соответствующие файлы RST в docs/modules
.
Например, чтобы добавить реализованный вами новый пулинговый слой в документацию, измените docs/modules/layer.rst
. Сначала вставьте имя слоя в список слоев:
Layer list
----------
.. autosummary::
NewPoolingLayer
Затем найдите часть пулингового слоя и добавьте:
.. -----------------------------------------------------------
.. Pooling Layers
.. -----------------------------------------------------------
Pooling Layers
------------------------
New Pooling Layer
^^^^^^^^^^^^^^^^^^^^^^^^^^
.. autoclass:: NewPoolingLayer
Наконец, протестируйте с локальной документацией:
cd ./docs
make clean
make html
# затем просмотрите сгенерированную локальную документацию по адресу ./html/index.html
# Пример статической модели
# Статическая модель имеет входы и выходы фиксированной формы.
inputs = tl.layers.Input([32, 784])
dense1 = tl.layers.Dense(n_units=800, act='relu', in_channels=784, name='dense1')(inputs) **dense2 = tl.layers.Dense(n_units=10, act='relu', in_channels=800, name='dense2')(dense1)**
**model = tl.models.Model(inputs=inputs, outputs=dense2)**
# Пример динамической модели
Динамическая модель обладает большей гибкостью. Входы и выходы могут различаться при разных запусках.
class CustomizeModel(tl.models.Model):
def __init__(self):
super(CustomizeModel, self).__init__()
self.dense1 = tl.layers.Dense(n_units=800, act='relu', in_channels=784, name='dense1')
self.dense2 = tl.layers.Dense(n_units=10, act='relu', in_channels=800, name='dense2')
# Динамическая модель позволяет повысить гибкость за счёт настройки пересылки данных.
def forward(self, x, bar=None):
d1 = self.dense1(x)
if bar:
return d1
else:
d2 = self.dense2(d1)
return d1, d2
model = CustomizeModel()
* Дополнительные примеры можно найти в [examples](examples/) и [tests/layers](tests/layers/). Обратите внимание, что не все из них завершены.
## Как внести новый слой Layer
* Новый слой NewLayer должен быть производным от базового класса [`Layer`](tensorlayer/layers/core.py).
* Методы-члены, которые необходимо переопределить:
- `__init__(self, args1, args2, inputs_shape=None, name=None)`: конструктор NewLayer, который должен
- Вызвать `super(NewLayer, self).__init__(name)` для построения базы.
- Определить переменные-члены на основе args1, args2 (или даже больше).
- Если предоставлено `inputs_shape`, вызвать `self.build(inputs_shape)` и установить `self._built=True`. Обратите внимание, что иногда достаточно только `in_channels`, чтобы построить слой, как в случае с [`Dense`](tensorlayer/layers/dense/base_dense.py).
- Ведение журнала с помощью `logging.info(...)`.
- `__repr__(self)`: возвращает печатаемое представление NewLayer.
- `build(self, inputs_shape)`: строит NewLayer путём определения весов.
- `forward(self, inputs, **kwargs)`: прямая подача NewLayer. Обратите внимание, что прямая подача некоторых слоёв может отличаться во время обучения и тестирования, например, [`Dropout`](tensorlayer/layers/dropout.py).
* Unittest:
- Unittest следует проводить перед отправкой запроса на вытягивание. Код unittest можно написать в [tests/](tests/).
* Документы:
- Пожалуйста, напишите описание для каждого класса и метода в формате RST. Описание может включать функциональность, аргументы, ссылки, примеры NewLayer.
* Примеры: [`Dense`](tensorlayer/layers/dense/base_dense.py), [`Dropout`](tensorlayer/layers/dropout.py), [`Conv`](tensorlayer/layers/convolution/simplified_conv.py).
## Как внести новую модель Model
* NewModel должна быть производной от базового класса [`Model`](tensorlayer/models/core.py) (если динамическая) или экземпляром [`Model`](tensorlayer/models/core.py) (если статическая).
* Статическая NewModel должна иметь фиксированные входы и выходы. Пожалуйста, проверьте пример [`VGG_Static`](tensorlayer/models/vgg.py).
* Динамическая NewModel обладает большей гибкостью. Пожалуйста, ознакомьтесь с примером [`VGG16`](tensorlayer/models/vgg16.py).
## Как создать новый пример/учебник
* Новый пример/учебное пособие должно реализовывать полный рабочий процесс глубокого обучения, который включает (но не ограничивается):
- Построение моделей на основе слоёв.
- Обработка и загрузка данных.
- Обучение и тестирование.
- Прямая подача с вызовом моделей.
- Функция потерь.
- Обратное распространение с помощью `tf.GradientTape()`.
- Сохранение и восстановление модели.
* Примеры: [MNIST](examples/basic_tutorials/tutorial_mnist_mlp_static.py), [CIFAR10](examples/basic_tutorials/tutorial_cifar10_cnn_static.py), [FastText](examples/text_classification/tutorial_imdb_fasttext.py).
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )