1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-TensorLayer

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
CONTRIBUTING.md 11 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 08:28 9a9b789

Руководство для участников TensorLayer

Добро пожаловать!

Приглашаем вас принять участие в развитии TensorLayer! Если у вас есть идеи по улучшению, отправьте нам запросы на вытягивание. Вы можете реализовать свои улучшения в своей ветке.

Контрольный список

  • Непрерывная интеграция
  • Сборка из источников
  • Модульные тесты
  • Документация
  • Общее введение в TensorLayer2
  • Как добавить новый слой
  • Как создать новую модель
  • Как внести вклад в новый пример или учебник

Непрерывная интеграция

Мы ценим вклад как в виде добавления или улучшения примеров, так и в расширении или исправлении основной библиотеки. Чтобы внести свой вклад, вам необходимо следовать стилю кодирования pep8 и стилю документации numpydoc. Мы полагаемся на непрерывную интеграцию (CI) для проверки коммитов. Для обеспечения прохождения тестов CI используются следующие инструменты:

  • yapf (форматирование кода), обязательно
  • isort (сортировка импорта), опционально
  • autoflake (удаление неиспользуемого импорта), опционально

Вы можете просто запустить

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

Общее введение в TensorLayer2

  • TensorLayer2 построен на TensorFlow2, поэтому TensorLayer2 полностью нетерпелив, без сеансов, без глобалов.
  • TensorLayer2 поддерживает API для создания статических моделей и динамических моделей. Поэтому все слои должны быть совместимы с двумя режимами.
# Пример статической модели
# Статическая модель имеет входы и выходы фиксированной формы.
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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-TensorLayer.git
git@api.gitlife.ru:oschina-mirror/mirrors-TensorLayer.git
oschina-mirror
mirrors-TensorLayer
mirrors-TensorLayer
master