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

OSCHINA-MIRROR/hanlubiao-hanzhi

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

汉智

Цель проекта — разработать набор простых, эффективных, гибких, удобных и расширяемых инструментов машинного обучения, которые лучше подходят для изучения и использования китайскими пользователями. В настоящее время набор включает:

  • кодировщик векторов слов (W2V);
  • нейронные сети.

Компиляция и установка

Windows:

Используйте VS2013 для непосредственного открытия win/HanZhi.sln. Если вы хотите запустить примеры, вам нужно вручную добавить соответствующие файлы в проект.
Кроме того, CBLAS (например, OpenBLAS-0.3.0) рекомендуется перекомпилировать на вашем устройстве.

Linux:

Вы можете выполнить make && make install для компиляции и установки. make может иметь следующие параметры:
1. USE_CBLAS=y указывает на использование CBLAS.
2. PREFIX=каталог HanZhi используется для указания каталога установки HanZhi.
3. cbals=каталог CBLAS используется для указания каталога CBLAS (необходимо установить заранее).
Если вы используете BLAS для ускорения, необходимо установить CBLAS заранее (например, OpenBLAS-0.3.0), а затем добавить USE_CBLAS=y при выполнении make.

Кодировщик векторов слов

W2V основан на word2vec и был переработан и оптимизирован по скорости. Алгоритм и параметры W2V такие же, как у оригинального word2vec, но после оптимизации структура W2V стала более чёткой, а скорость увеличилась более чем в два раза.

Использование: создайте новый объект W2V, затем передайте основной параметр методу run. Вы можете обратиться к samples/w2v/testw2v_en.cpp. Параметры совместимы с word2vec. Кроме того, предоставляются китайские параметры. Подробную информацию о памяти можно найти в «doc/W2V 参数.txt».

Пример:

./w2v -train text8 -filetype en -output text8_vec  -cbow 1 -size 200 -window 8 -negative 25 -hs 0 -sample 1e-4 -iter 15
./w2V -输入 text8 -文本格式 英文 -输出 text8_vec -填空 1 -词向量长 200 -窗口大小 8 -负样本数 25 -分层训练 0 -采样丢弃高频词系数 1e-4 -迭代次数 15
Приведённые выше две формы записи имеют одинаковый эффект.

Нейронные сети

В основе нейронных сетей HanZhi лежит вычислительный граф. В настоящее время поддерживается только вычисление на CPU. Скорость локального тестирования выше, чем у TensorFlow (использование CBLAS для обучения mnist может ускорить процесс в 1 раз и более).

Структура: состоит из шести основных модулей: вычислительного графа, узла графа, класса данных, размера данных, исполнителя и тренера.

Процесс использования:

  1. Создайте вычислительный граф или используйте его по умолчанию.
  2. Добавьте узлы в вычислительный граф, чтобы построить необходимую структуру вычислений.
  3. Создайте исполнителей и тренеров.
  4. Используйте исполнителей для выполнения вычислений и тренировок.
  5. Сохраните модель после завершения тренировки и загрузите её для последующего использования. Конкретные интерфейсы см. в «doc/神经网络.txt».

Пример создания DNN-сети:

addNode("输入", WaitInput, "尺寸:30,100"); // Добавляем узел с именем «ввод», который ожидает ввода данных. Размерность: 30, 100 означает, что размер пакета равен 30, а длина вектора равна 100.
addNode("权重", Random, "尺寸:20,100;标准差:0.1"); // Добавляем узел с именем «вес», который является случайным числом. Используется случайное число со стандартным отклонением 0,1 для инициализации.
addNode("偏置", FixedVal, "尺寸:20;值:0.1"); // Добавляем узел с именем «смещение», которое является фиксированным значением. Начальное значение равно 0,1.
addNode("输出", mul2d, NULL, "输入,权重,偏置"); // Добавляем двумерный умножающий узел с именем «вывод». Для получения подробной информации о двумерном умножении обратитесь к «doc/神经网络.txt».

Пример создания CNN-сети:

addNode("输入", WaitInput, "尺寸:0,128,128,3"); // Добавляем узел с именем «вход», который ожидает ввода данных. Размеры: 0, 128, 128, 3 означают, что количество пакетов может варьироваться, размер одной картинки составляет 128 x 128 пикселей, а глубина равна 3.
addNode("卷积核", Random, "尺寸:10,7,7,3;标准差:0.1"); // Добавляем узел с именем «ядро свертки», который является случайным числом. Используем случайное число со стандартным отклонением 0,1 для инициализации.
addNode("偏置", FixedVal, "尺寸:10;值:0.1"); // Добавляем узел с именем «смещение», который является фиксированным значением. Начальное значение равно 0,1.
addNode("卷积", Conv2d, "补白:是;步长:2,2", "图像输入,卷积核1,偏置1"); // Добавляем двумерный сверточный узел с именем «свертка». Таким образом, можно создать слой свертки.

Вычислить значение узла:

Actuator *actuator1 = new Actuator(); // Определяем исполнителя.
actuator1->cal("卷积"); // Вычисляем значение узла с именем «свертка».

Тренировка сети:

Actuator *actuator1 = new Actuator(); // Определяем исполнителя.
AdamTrainer *_trainer = new AdamTrainer("卷积"); // Определяем тренера.
actuator1->train(_trainer); // Тренируем.

Сохранить данные, загрузить данные:

saveData("model", 1); // Сохраняем данные.
loadData("model", 1); // Загружаем данные.

Полный пример обучения рукописных цифр можно посмотреть в samples/nn/mnist.

Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/hanlubiao-hanzhi.git
git@api.gitlife.ru:oschina-mirror/hanlubiao-hanzhi.git
oschina-mirror
hanlubiao-hanzhi
hanlubiao-hanzhi
master