DzenIT

HOME ZEN IT SOFT APK LIVE GAME OTHER W CONTACT SEARCH

Нейросеть заметки

Решил попробовать нейросеть, кое-что изучил и решил поделиться своим опытом.

Нейросеть - это просто, первые шаги

Для начала перейдем в https://colab.research.google.com/, создадим свой блокнот для дальнейшей работы и настроим его для дальнейшего использования.

Создаем свой первый блокнот, среду выполнения выбираем GPU


colab среда выполнения GPU

Вставим код который проверит gpu, скачает минимальную модель нейросети, генерирует указанный нами текст Hello Kitty! с несколькими примерами

!nvidia-smi
	  
%tensorflow_version 1.x
!pip install -q gpt-2-simple
import gpt_2_simple as gpt2
from datetime import datetime
from google.colab import files

model_name = "117M"
gpt2.download_gpt2(model_name=model_name)

sess = gpt2.start_tf_sess()
gpt2.load_gpt2(sess, model_name=model_name)
	  
	  
gpt2.generate(sess,
              model_name=model_name,
              prefix="Hello Kitty!",
              length=150,
              temperature=0.7,
              top_p=0.9,
              nsamples=20,
              batch_size=20
              )

Нейросеть генерация текста


Нейросеть проверка gpu


Нейросеть минимальный алгоритм


Нейросеть генерация текста

Я думаю интуитивно понятно как она работает, жаль что язык только английский. Теперь давайте настроим нашу рабочую среду для дальнейшего использования

Нейросеть беспрерывная работа, настройка, ошибки

Нейросеть на базе gpu в colab дается корпорацией гугла на время, время аренды 12 часов, но по факту я получал максимум 7 часов. При обучении нейросети, связь с colab обрывается и приходится всё начинать с самого начала. Несколько решений по продолжению обучения, мы рассмотрим дальше.

Чтобы не прерывалась работа нейросети в colab, можно закинуть в консоль браузера небольшой скрип, который будет имитировать деятельность. Нажимаем CTRL+SHIFT+I выбираем консоль и вставляем код

function ConnectButton(){
    console.log("Connect pushed"); 
    document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click() 
}

var colab = setInterval(ConnectButton,60000);

Жмем ENTER.


Бесприрывная работы нейросети

В firefox стоит ограничение на вставку в консоль браузера, решение — about:config, параметр devtools.selfxss.count выставить 100.

Этот скрипт позволит работать нейросети безпрерывно, однако через 2-3 часа гугл запросит капчу, но это лучше чем полный сброс

Когда случаются ошибки в сессии нейросети, при перезапуске кода, мне обычно помогала команда

sess= gpt2.reset_session(sess=sess)

По моим скромным подсчетам обучение в 1000 шагов занимает ~40 мин с gpu

Нейросеть обучение, пример

На примере покажу как обучать нейросеть дзен буддизму, для этого я скачаю заготовленный файл 101 историю дзен в txt и закину файл себе на гугл диск. Приступим.

Проверяем наличие видеокарты

!nvidia-smi

Подгружаем модули

%tensorflow_version 1.x
!pip install -q gpt-2-simple
import gpt_2_simple as gpt2
import time
from datetime import datetime
from google.colab import files
gpt2.download_gpt2(model_name="124M")

Монтируем наш гугл диск

gpt2.mount_gdrive()

Название файла на гугл диске по которому будет обучаться нейросеть, копируем его.

file_name = "101.txt"
gpt2.copy_file_from_gdrive(file_name)

Старт сессии и начало тренировки, незабываем добавить скрипт для беспрерывной работы нейросети

sess = gpt2.start_tf_sess()
gpt2.finetune(sess,
              dataset=file_name,
              model_name='124M',
              steps=1000,
              restore_from='fresh',
              run_name='run1',
              print_every=10,
              sample_every=200,
              save_every=500
              )
 

dataset — наш файл для обучения

model_name — модель, пока гугл позволяет использовать 124

print_every — печать прогресса обучения каждые 10 шагов

sample_every — результат обучения каждые 200 шагов обучения

steps — количество шагов обучения

После обучения модель лучше всего сохранить на гугл диск, т. к. после закрытия сессии будет всё удалено.

sess= gpt2.reset_session(sess=sess)
gpt2.copy_checkpoint_to_gdrive(run_name='run1')

Можно посмотреть чему мы научили наше нейросеть, насколько она стала буддистом.

gpt2.generate(sess, run_name='run1')

Можно генерировать свои книжу 101 дзен история часть 2 и сохранить себе

gen_file = 'gpt2_gentext_{:%Y%m%d_%H%M%S}.txt'.format(datetime.utcnow())

gpt2.generate_to_file(sess,
                      destination_path=gen_file,
                      length=500,
                      temperature=0.7,
                      nsamples=101,
                      batch_size=20
                      )
files.download(gen_file)

Продолжение обучения нейросети

Время работы ограничено, а для нормального обучения требуется большего шагов обучения. Поэтому незабываем сохранять результат нашего обучения.

Продолжим обучение, скачаем с гугл диска наш результат и продолжим обучение с сохранением в n количество шагов.

Тут как обычно

!nvidia-smi

%tensorflow_version 1.x
!pip install -q gpt-2-simple
import gpt_2_simple as gpt2
import time
from datetime import datetime
from google.colab import files
gpt2.download_gpt2(model_name="124M")

gpt2.mount_gdrive()

Качаем наш файл тренировки + чекпоинт сохраненный ранее, распаковываем его

file_name = "traine.txt"
gpt2.copy_file_from_gdrive(file_name)
gpt2.copy_file_from_gdrive('checkpoint_run1.tar')
!tar -xvf 'checkpoint_run1.tar'

Завернём в цикл наш тренировочный скрипт с автосохранением каждые 1000 шагов

while True:
    sess = gpt2.start_tf_sess()
    sess= gpt2.reset_session(sess=sess)
    gpt2.finetune(sess,
                  dataset=file_name,
                  model_name='124M',
                  steps=1000,
                  restore_from='latest',
                  overwrite=True,
                  run_name='run1',
                  print_every=10,
                  sample_every=200,
                  )
    time.sleep(20)
    gpt2.copy_checkpoint_to_gdrive(run_name='run1')
    print('send to google ok!')
    print('send to google ok!')
    print('send to google ok!')
    time.sleep(20)

Основные параметры продолжения обучения

restore_from='latest' — восстановить последнюю сессию

overwrite=True — перезапись свежими данными, т. к. гугл диск не резиновых, а это позволит сохранять только последний результат

Генерация и сохранения текста в неограниченных количествах или слушаем истории нейросети вечно

Когда достигли нужного уровня нейросети после обучения, можно заняться генерацией её творчества. Простой скрипт бесконечной генерации + сохранения на гугл диск

!nvidia-smi

%tensorflow_version 1.x
!pip install -q gpt-2-simple
import gpt_2_simple as gpt2
import time
from datetime import datetime
from google.colab import files
gpt2.download_gpt2(model_name="124M")

gpt2.mount_gdrive()

file_name = "traine.txt"
gpt2.copy_file_from_gdrive(file_name)
gpt2.copy_file_from_gdrive('checkpoint_run1.tar')
!tar -xvf 'checkpoint_run1.tar'

while True:
    sess= gpt2.reset_session(sess=sess)
    sess = gpt2.start_tf_sess()
    gpt2.finetune(sess,
              dataset=file_name,
              model_name='124M',
              steps=1,
              restore_from='latest',
              run_name='run1'
              )
    gen_file = 'gpt2_gentext_{:%Y%m%d_%H%M%S}.txt'.format(datetime.utcnow())
    gpt2.generate_to_file(sess,
						  destination_path=gen_file,
						  length=200,
						  temperature=0.7,
						  nsamples=2000,
						  batch_size=20
						  )
						  
    gpt2.copy_file_to_gdrive(gen_file)
    print('file send 2 google drive')

Описывать ничего не буду, только скажу что без тренировке и сбросе сессии завернуть генерацию историй в бесконечный цикл не получилось

Нейросеть, используем 774 модель для генерации.

Пусть 774M только на английском языке, но она круто обучена, а переводчик никто не запрещает использовать.

!nvidia-smi
%tensorflow_version 1.x
!pip install -q gpt-2-simple
import gpt_2_simple as gpt2
from datetime import datetime
from google.colab import files

model_name = "774M"
gpt2.download_gpt2(model_name=model_name)

sess = gpt2.start_tf_sess()
gpt2.load_gpt2(sess, model_name=model_name)

gpt2.generate(sess,
              model_name=model_name,
              prefix="I LOVE YOU!",
              length=150,
              temperature=0.7,
              top_p=0.9,
              nsamples=140,
              batch_size=20
              )

Нейросеть в каждый дом! Установка нейросети на python 3

pip3 install gpt-2-simple

Установка + обучение в домашних условиях (не рекомендуется)

import gpt_2_simple as gpt2
import os
import requests

model_name = "124M"
if not os.path.isdir(os.path.join("models", model_name)):
	print(f"Downloading {model_name} model...")
	gpt2.download_gpt2(model_name=model_name)   # model is saved into current directory under /models/124M/


file_name = "shakespeare.txt"
if not os.path.isfile(file_name):
	url = "https://raw.githubusercontent.com/karpathy/char-rnn/master/data/tinyshakespeare/input.txt"
	data = requests.get(url)

	with open(file_name, 'w') as f:
		f.write(data.text)


sess = gpt2.start_tf_sess()
gpt2.finetune(sess,
              file_name,
              model_name=model_name,
              steps=100)   # steps is max number of training steps

gpt2.generate(sess)

Лучше обучить нейросеть в colab, и залить её на пк через гугл диск, как описывалось ранее, файлы закинуть в checkpoint\run1\

Вот так можно генерировать текст у себя на пк

import gpt_2_simple as gpt2
from datetime import datetime

sess = gpt2.start_tf_sess()
gpt2.load_gpt2(sess)

gen_file = ('trulala')
gpt2.generate_to_file(sess,
                      destination_path=gen_file,
                      length=100,
                      temperature=0.7,
                      nsamples=1000,
                      batch_size=20
                      )  

И напоследок я хочу сказать "Дзен поступить в другой мире. Гуду сел возле немного денег, поэтому она проснула ему"