Разное

Видео уроки scratch на русском: Видео уроки Scratch 2.0 для начинающих

урок Scratch-программирования — Школа программирования Пиксель на DTF

Наверняка вы слышали о таких играх, как Jazz Dance и Pokemon Go. Их необычный геймплей основан на том, что на экране перед нами реальный мир через камеру вашего устройства. Игра изменяет его, дополняя к реальности цифровые объекты. Если вашего ребенка захватила технология AR, то знайте: это может быть больше, чем просто игрушка!

116 просмотров

Львиная доля IT-компаний, специализирующихся на AR, обслуживают медицину, промышленность и аэрокосмическую отрасль. С помощью перчаток и очков дополненной реальности уже обучают хирургов. Что касается промышленности, то здесь AR востребована в дистанционных консультациях.

Настало время и нам прикоснуться к этой ветви на дереве IT-технологий. В очередном уроке Scratch на русском мы сделаем игру с элементами AR на платформе визуальной среды программирования Scratch.

Дополненная реальность в Скретч: что будем делать?

Scratch — специально разработанный для детей конструктор и онлайн-платформа для обучения программированию.

Несмотря на то, что программирование в нем выполняется с помощью графических блоков с разными функциями, которые нужно объединять перетаскиванием (drag-and-drop) в единый алгоритм, возможности Scratch не сильно уступают традиционным языкам, в которых код пишут.

Мы сделаем игру, в которой из одного угла экрана в другой случайно перемещается, скажем, баскетбольный мяч. На заднем плане будем сидеть мы. Игра нас будет видеть благодаря камере лэптопа. Если собьем мяч рукой, то его изображение размоется благодаря эффекту «укрупнения пикселей». Мяч пропадет, а за попадание нам зачислится очко. Впрочем, лучше один раз увидеть.

Если вам удобнее визуальная подача, смотрите о том, как сделать AR-игру в нашем видеоуроке Scratch.

Этап I. Делаем несколько предварительных заготовок

  1. Перейдите на специальный сайт для детей Скретч, где можно программировать (https://scratch.mit.edu/). Создайте новый «Спрайт». Выберите на плашке «Спрайт» пункт «Выбрать спрайт» или «Choose Sprite», если у вас русский язык интерфейса.
    Можете выбрать любой из набора готовых спрайтов или загрузить собственный. Мы будем в игре использовать баскетбольный мяч.

2. Спрайт справа внизу у вас должен быть после этого выделен. Если этого не произошло — выделите его. Перейдите на вкладку «код» и из предложенных групп «визуальных блоков» выберите группу «События» (Events).

У нас есть цикл обучающих видеоуроков по Scratch на русском, они помогут разобраться во всех тонкостях Scratch.

Нам понадобится первый же компонент, который называется «Когда нажат» (When clicked). Подхватите блок кликом левой кнопки мышки по нему. Не отпуская кнопку, перетащите блок в рабочую область. Попробуйте создать игру с AR вместе с вашими детьми. Программа на Скретч с элементами дополненной реальности – один из самых интересных проектов, которые можно реализовать.

3. Начало положено! Если хотите получить больше уроков и примеров программ Scratch, смотрите наши видео на Youtube. Ну а мы продолжаем делать нашу AR-игру.

Теперь найдите в группах блоков разного цвета справа раздел «Переменные» (Variables). Вверху будет видна опция «Создать переменную», или Make a Variable. Нажмите ее, нам нужно создать счетчик пойманных мячей.

В открывшемся диалоговом окне назовите переменную «очков» (Сколько очков?), оставив другие настройки без изменений. Переменная должна была появиться у вас на плашке с левой стороны экрана.

Появилась? Здорово! Там же, в разделе переменные имеется блок «Задать значение» или set to, если у вас англоязычный интерфейс. Перенесите его в рабочую область под уже добавленный блок. В каскадном меню внутри блока выберите нашу переменную «очков» и присвойте ей значение 0.

4. Реализуя нашу игру вы и сами не заметите, как освоите основы языка программирования Scratch. Выберите группу блоков «Внешний вид» (Looks) и добавьте ниже первых двух блоков новый блок «спрятаться» (hide). Следующий блок – из группы «События» (Events) – «Передать сообщение» (Broadcast message). В параметрах указываем «Клон сферы».

Новый блок: подцепляем снизу цикл «Повторять всегда» из группы Управление (Control). По-английски на этом блоке просто написано «forever». Внутрь цикла «Повторять всегда» вставляем условие «Если, то» (If then). Находим в «зеленой» группе блоков «Operators» (Операторы) маленький блок с двумя параметрами и значком, что левое значение больше «>» правого. Его, в свою очередь, вставляем внутрь условия «if». Правый параметр указываем «30».

Узнайте, как создать другую игру – Зомби в нашем онлайн-видео для детей.

То есть, нечто должно быть больше «30». Не пугайтесь того, что некоторые значения мы оставляем пустыми. Пока мы делаем структуру и вернемся к ним. Внутрь условия помещаем уже знакомый нам блок «передать сообщение». Сообщение будет «Порезать сферу». В дальнейшем станет понятно, зачем нам столь странные названия. У нас получилось, что сообщение должно быть передано при наступлении условия в блоке «если». Давайте сверимся, что у нас получилось.

5. Смелее! Основы программирования на Скретч освоить очень легко. Наша цель в создании этой игры, чтобы мяч рандомно, то есть случайно, вылетал с левой стороны и двигался вправо, или двигался справа налево, а потом исчезал. Пропишем соответствующие условия.

Если у вас англоязычный интерфейс Scratch, то блоки будут подписаны скорее так:

6. Сохраняйте свой проект на локальный компьютер время от времени. Скретч-программирование онлайн на сайте разработчика языка имеет ту издержку, что подвисание вкладки браузера может привести к потере всего, что вы уже сделали.

Но вернемся к коду. Если значение X положительное, то мяч вылетает с одной стороны, если отрицательное, то появляется с другой. После того, как мяч продвигается до другой стороны экрана – он пропадает. Когда в скрипт с помощью блока «передать» поступает сообщение «клон сферы» мы возвращаемся к началу и повторяем появление мяча. Первые несколько блоков этой части кода отвечают за реакцию мяча на прикосновение.

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

Если на вход в этот сегмент кода поступит сообщение «Клон сферы», то произойдет укрупнение пикселей. Следующую часть кода тоже пока копируйте, как показано на скриншоте.

Как мы всегда говорим на курсах программирования Scratch: глаза боятся – руки делают. Ее предназначение станет яснее после того, как мы добавим в Scratch расширение, которое включит в нашу игру изображение с камеры.

7. Часть кода, которую мы делали во вторую очередь добавьте к коду, сделанному нами вначале, чтобы она запускалась всегда при получении сообщения «клон сферы».

Этап II. Добавляем расширение с камеры и доделываем сделанные заготовки

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

2. Вуаля! В правом экране, фоном к нашему мячу мы получили изображение с камеры лэптопа.

3. Подходит ли Scratch для обучения детей программированию? Он для этого и создан! Вы можете осваивать программирование в дружелюбной и понятной среде. Это интересно и весело! Ну а мы продолжаем…

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

Затем в условие запуска всего нашего алгоритма с рандомным запуском меча ставим сближение движущегося объекта на видео и нашего спрайта мяча. Вот и все — скрипт готов! Попробуйте поймать мяч и посмотрите, как он отреагирует.

Несколько слов в заключение

AR – перспективная технология. Но не только она составляет мир IT. Важно развиваться в разных направлениях. Можно начать с бесплатных ресурсов для изучения любой современной платформы программирования: Scratch, Roblox, Minecraft и другие.

В Сети есть немало ресурсов для детей и начинающих онлайн. Выбирайте и погружайтесь в удивительную вселенную информационных технологий.

Skysmart — онлайн-школа 🏫 для детей и подростков

Онлайн-школа Skysmart
для детей


и подростков

Понятно объясняем любые школьные темы, увлекаем учёбой и IT-навыками

Записаться на урок

  • Занятия 1 на 1 с репетитором

    Индивидуальный подход к цели и интересам ребенка

  • Интерактивные задания

    Нравятся детям и подросткам и соответствуют программе

  • Персональное расписание

    Подберем репетитора
    под ваш график

    Выберите, что нужно ребёнку, а мы дадим знания и разовьём интерес к любому предмету

      Подготовим к 1 классу, научим играть в шахматы и говорить на английском

      • Подготовка к школе
      • Английский язык
      • Шахматы
      • Подготовка к школе
      • Английский язык
      • Шахматы

      Заложим надежную базу для обучения в средней и старшей школе

      Понятно объясним любую тему и поможем улучшить оценки

      • Математика
      • Русский язык
      • Английский язык
      • Обществознание
      • Физика
      • Химия
      • Шахматы
      • Математика
      • Русский язык
      • Английский язык
      • Обществознание
      • Физика
      • Химия
      • Шахматы

      Поможем показать свой максимум на экзамене и набрать 85+ баллов

      • Подготовка к ОГЭ
      • Подготовка к ЕГЭ
      • Подготовка к ОГЭ
      • Подготовка к ЕГЭ

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

      12 предметов:
      от английского до шахмат и не только

      • Математика
      • Русский язык
      • Английский язык
      • Программирование
      • Обществознание
      • Физика
      • Химия
      • Шахматы
      • Математика
      • Русский язык
      • Английский язык
      • Программирование
      • Обществознание
      • Физика
      • Химия
      • Шахматы

    Наши полезные материалы


    и мероприятия, которые вдохновят учиться

    Организуем обучение так, что у вашего ребенка всё получится

    Организуем обучение так,


    что у вашего ребенка всё получится

    • 01

      После вводного урока подберем репетитора под ваше расписание

    • 02

      Сформулируем цели и дадим чёткий план, как их достичь

    • 03

      Cоставим ребенку индивидуальную программу

    • 04

      Покажем прогресс и каждый месяц будем присылать отчёты

    Соедини предмет с его озвучкой

    bicyclegamepadplanechairbackpackarmchair

    На съемке одного из уроков в Skysmart необходимо было написать на доске несколько примеров. Примеры написать — написали, а решить их не смогли.Помоги справиться с казусом:

    PHZpbS1tYXRoPjIsNDc2XGNkb3QxMDArMyw1MjRcY2RvdDEwMD08L3ZpbS1tYXRoPg==PHZpbS1tYXRoPjYwMDwvdmltLW1hdGg+PHZpbS1tYXRoPjEzNjYyXGNkb3QyLDUrMjIxMjJcY2RvdDIsNSs0MjE2XGNkb3QyLDU9PC92aW0tbWF0aD4=PHZpbS1tYXRoPjEwMDAwMDwvdmltLW1hdGg+PHZpbS1tYXRoPjIzNDIrMzIxMis3NjU4PTwvdmltLW1hdGg+PHZpbS1tYXRoPjEzMjEyPC92aW0tbWF0aD4=

    Вычеркни те предметы, которые не проявляют упругие свойства на данной анимации

    Батутслоникножки батутарезинка у шляпкишляпкахвост слоникавоздушные шары

    Вычеркни газ, который не является одноатомным

    фторциан (FCN)гелий (He)неон (Ne)аргон (Ar)хлороводород (HCl)ксенон (Xe)криптон (Kr)

    Расставь знаки препинания

    Школа в столице была прекрасно оборудована. Вот только учителя были как будто из средневековья.

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

    PHZpbS1tYXRoPjItMT08L3ZpbS1tYXRoPg==PHZpbS1tYXRoPtC+0LTQuNC9PC92aW0tbWF0aD4=PHZpbS1tYXRoPjQrMT08L3ZpbS1tYXRoPg==PHZpbS1tYXRoPtC/0Y/RgtGMPC92aW0tbWF0aD4=PHZpbS1tYXRoPjErMT08L3ZpbS1tYXRoPg==PHZpbS1tYXRoPtC00LLQsDwvdmltLW1hdGg+PHZpbS1tYXRoPjErMj08L3ZpbS1tYXRoPg==PHZpbS1tYXRoPtGC0YDQuDwvdmltLW1hdGg+

    Каролине 14 лет. Она любит читать комиксы, её любимым музыкальным направлением является k-pop и больше всего в жизни она мечтает побывать в Южной Корее. Какие черты Каролины характеризуют её социальную сущность?

    Каролина с 5 лет занимается художественной гимнастикой.У Каролины голубые, как небо, глаза.У Каролины аллергия на морепродукты.Каролина очень любит кошек.В любой компании Каролина чувствует себя лидером.Веснушки на лице Каролины напоминают о лете.

    Почему занятия в Skysmart стоят того,


    чтобы за них платить

    Выберите формат обучения

    Наши репетиторы найдут подход к каждому ребёнку и объяснят сложное простыми словами

    Это подтверждают


    результаты наших учеников

    А ещё рейтинг по их отзывам

    Создайте личный кабинет и начните учиться

    По телефону договоримся о первом уроке

    Почта будет логином в личный кабинет

    Языковой перевод с помощью TorchText — Руководство по PyTorch 1.

    7.1, документация

    Ярлыки

    В этом руководстве показано, как использовать torchtext для предварительной обработки данные из известного набора данных, содержащего предложения как на английском, так и на немецком языках, и использовать их для тренировать модель последовательностей с вниманием, которое может переводить предложения на немецком языке на английский.

    Основан на этот учебник от члена сообщества PyTorch Бена Треветта с разрешения Бена. Мы обновляем руководства, удаляя часть устаревшего кода.

    К концу этого руководства вы сможете препроцессировать предложения в тензоры для моделирования НЛП и использовать torch.utils.data.DataLoader для обучения и проверки модели.

    Обработка данных

    torchtext содержит утилиты для создания наборов данных, которые можно легко повторяется с целью создания языкового перевода модель. В этом примере мы показываем, как токенизировать необработанное текстовое предложение, создавать словарь и преобразовывать токены в тензор.

    Примечание: для токенизации в этом руководстве требуется Spacy Мы используем Spacy, потому что он обеспечивает надежную поддержку токенизации в языках. кроме английского. torchtext предоставляет токенизатор basic_english и поддерживает другие токенизаторы для английского языка (например, Моисей) но для языкового перевода, где требуется несколько языков, Спейси — ваш лучший выбор.

    Чтобы запустить это руководство, сначала установите spacy , используя pip или conda . Затем загрузите необработанные данные для английского и немецкого токенизаторов Spacy:

     python -m spacy загрузить en
    python -m spacy загрузить де
     
     импорт торчтекста
    импортный факел
    из torchtext.data.utils импортировать get_tokenizer
    из коллекций импорт Счетчик
    из torchtext.vocab импортировать Vocab
    из torchtext.utils импортировать download_from_url, extract_archive
    импорт io
    url_base = 'https://raw.githubusercontent. com/multi30k/dataset/master/data/task1/raw/'
    train_urls = ('train.de.gz', 'train.en.gz')
    val_urls = ('val.de.gz', 'val.en.gz')
    test_urls = ('test_2016_flickr.de.gz', 'test_2016_flickr.en.gz')
    train_filepaths = [extract_archive(download_from_url(url_base + url))[0] для URL в train_urls]
    val_filepaths = [extract_archive(download_from_url(url_base + url))[0] для URL в val_urls]
    test_filepaths = [extract_archive(download_from_url(url_base + url))[0] для URL в test_urls]
    de_tokenizer = get_tokenizer('spacy', language='de')
    en_tokenizer = get_tokenizer('spacy', language='en')
    def build_vocab (путь к файлу, токенизатор):
      счетчик = счетчик()
      с io.open(filepath, encoding="utf8") как f:
        для string_ в f:
          counter.update (токенизатор (string_))
      Вернуть Vocab (счетчик, Specials = ['', '', '', ''])
    de_vocab = build_vocab (train_filepaths[0], de_tokenizer)
    en_vocab = build_vocab (train_filepaths[1], en_tokenizer)
    def data_process (пути к файлам):
      raw_de_iter = iter(io.open(пути к файлам[0], encoding="utf8"))
      raw_en_iter = iter(io. open(пути к файлам[1], encoding="utf8"))
      данные = []
      для (raw_de, raw_en) в zip(raw_de_iter, raw_en_iter):
        de_tensor_ = torch.tensor([de_vocab[token] для токена в de_tokenizer(raw_de)],
                                dtype=факел.длинный)
        en_tensor_ = torch.tensor([en_vocab[token] для токена в en_tokenizer(raw_en)],
                                dtype=факел.длинный)
        data.append((de_tensor_, en_tensor_))
      возвращаемые данные
    train_data = data_process (train_filepaths)
    val_data = data_process(val_filepaths)
    test_data = data_process (test_filepaths)
     

    DataLoader

    Последней особенностью torch , которую мы будем использовать, является DataLoader , который прост в использовании, поскольку он принимает данные в качестве своего первый аргумент. В частности, как говорится в документах: DataLoader сочетает в себе набор данных и сэмплер и обеспечивает итерацию по заданному набору данных. DataLoader поддерживает наборы данных как в виде карты, так и в итерируемом стиле с однопроцессорной или многопроцессорной загрузкой, настройкой порядка загрузки и дополнительным автоматическим пакетированием (сопоставлением) и закреплением в памяти.

    Обратите внимание на collate_fn (необязательно), который объединяет список сэмплов для формирования мини-пакета тензоров. Используется при пакетной загрузке из набора данных в стиле карты.

     импортная горелка
    устройство = torch.device('cuda', если torch.cuda.is_available() иначе 'процессор')
    BATCH_SIZE = 128
    PAD_IDX = de_vocab['']
    BOS_IDX = de_vocab['']
    EOS_IDX = de_vocab['']
    из torch.nn.utils.rnn импортировать pad_sequence
    из torch.utils.data импортировать DataLoader
    def generate_batch (data_batch):
      de_batch, en_batch = [], []
      для (de_item, en_item) в data_batch:
        de_batch.append(torch.cat([torch.tensor([BOS_IDX]), de_item, torch.tensor([EOS_IDX])], dim=0))
        en_batch.append(torch.cat([torch.tensor([BOS_IDX]), en_item, torch.tensor([EOS_IDX])], dim=0))
      de_batch = pad_sequence (de_batch, padding_value = PAD_IDX)
      en_batch = pad_sequence (en_batch, padding_value = PAD_IDX)
      вернуть de_batch, en_batch
    train_iter = DataLoader (train_data, batch_size = BATCH_SIZE,
                            shuffle=Истина, collate_fn=generate_batch)
    valid_iter = DataLoader (val_data, batch_size = BATCH_SIZE,
                            shuffle=Истина, collate_fn=generate_batch)
    test_iter = DataLoader (test_data, batch_size = BATCH_SIZE,
                           shuffle=Истина, collate_fn=generate_batch)
     

    Определение нашего

    nn. Module и Optimizer

    В основном это с точки зрения torchtext : с построенным набором данных и итератор определен, остальная часть этого руководства просто определяет наш модель как nn.Module вместе с оптимизатором , а затем обучает его.

    В частности, наша модель соответствует описанной архитектуре здесь (можно найти значительно более прокомментированная версия здесь).

    Примечание: эта модель является лишь примером модели, которую можно использовать для языка перевод; мы выбираем его, потому что это стандартная модель для задачи, не потому, что это рекомендуемая модель для перевода. Как вы вероятно, известно, что современные модели в настоящее время основаны на Трансформерах; вы можете увидеть возможности PyTorch для реализации слоев Transformer здесь; и в частности, «внимание», используемое в приведенной ниже модели, отличается от многоголовое внимание к себе, присутствующее в модели-трансформере.

     случайный импорт
    от ввода import Tuple
    импортировать torch.nn как nn
    импортировать torch.optim как optim
    импортировать torch.nn.functional как F
    от факела импорт Tensor
    Кодировщик класса (nn.Module):
        def __init__(я,
                     input_dim: целое,
                     emb_dim: целое,
                     enc_hid_dim: целое,
                     dec_hid_dim: целое,
                     выпадение: плавающее):
            супер().__инит__()
            self.input_dim = input_dim
            self.emb_dim = emb_dim
            self.enc_hid_dim = enc_hid_dim
            self.dec_hid_dim = dec_hid_dim
            self.dropout = отсев
            self.embedding = nn.Embedding (input_dim, emb_dim)
            self.rnn = nn.GRU(emb_dim, enc_hid_dim, двунаправленный = True)
            self.fc = nn.Linear(enc_hid_dim * 2, dec_hid_dim)
            self.dropout = nn.Dropout(выпадение)
        защита вперед (я,
                    src: Tensor) -> Tuple[Tensor]:
            встроенный = self.dropout (self.embedding (src))
            выходы, скрытые = self. rnn (встроенные)
            скрытый = torch.tanh(self.fc(torch.cat((скрытый[-2,:,:], скрытый[-1,:,:]), тусклый = 1)))
            обратные выходы, скрытые
    Внимание класса (nn.Module):
        def __init__(я,
                     enc_hid_dim: целое,
                     dec_hid_dim: целое,
                     attn_dim: целое):
            супер().__инит__()
            self.enc_hid_dim = enc_hid_dim
            self.dec_hid_dim = dec_hid_dim
            self.attn_in = (enc_hid_dim * 2) + dec_hid_dim
            self.attn = nn.Linear(self.attn_in, attn_dim)
        защита вперед (я,
                    decoder_hidden: тензор,
                    encoder_outputs: тензор) -> тензор:
            src_len = encoder_outputs.shape[0]
            Repeat_decoder_hidden = decoder_hidden.unsqueeze(1).repeat(1, src_len, 1)
            encoder_outputs = encoder_outputs.permute(1, 0, 2)
            энергия = факел.tanh(self.attn(torch.cat((
                Repeat_decoder_hidden,
                кодировщик_выходы),
                тусклый = 2)))
            внимание = torch.sum (энергия, тусклый = 2)
            вернуть F. softmax(внимание, dim=1)
    Декодер класса (nn.Module):
        def __init__(я,
                     output_dim: целое,
                     emb_dim: целое,
                     enc_hid_dim: целое,
                     dec_hid_dim: целое,
                     отсев: инт,
                     внимание: nn.Module):
            супер().__инит__()
            self.emb_dim = emb_dim
            self.enc_hid_dim = enc_hid_dim
            self.dec_hid_dim = dec_hid_dim
            self.output_dim = output_dim
            self.dropout = отсев
            внимание к себе = внимание
            self.embedding = nn.Embedding (output_dim, emb_dim)
            self.rnn = nn.GRU((enc_hid_dim * 2) + emb_dim, dec_hid_dim)
            self.out = nn.Linear(self.attention.attn_in + emb_dim, output_dim)
            self.dropout = nn.Dropout(выпадение)
        def _weighted_encoder_rep (сам,
                                  decoder_hidden: тензор,
                                  encoder_outputs: тензор) -> тензор:
            a = self.attention (decoder_hidden, encoder_outputs)
            a = a.unsqueeze (1)
            encoder_outputs = encoder_outputs. permute(1, 0, 2)
            weighted_encoder_rep = torch.bmm(a, encoder_outputs)
            weighted_encoder_rep = weighted_encoder_rep.permute(1, 0, 2)
            вернуть weighted_encoder_rep
        защита вперед (я,
                    ввод: тензор,
                    decoder_hidden: тензор,
                    encoder_outputs: Tensor) -> Tuple[Tensor]:
            ввод = ввод.разжать(0)
            встроенный = self.dropout (self.embedding (ввод))
            weighted_encoder_rep = self._weighted_encoder_rep(decoder_hidden,
                                                              кодировщик_выходы)
            rnn_input = torch.cat((встроенный, weighted_encoder_rep), dim = 2)
            вывод, decoder_hidden = self.rnn(rnn_input, decoder_hidden.unsqueeze(0))
            встроенный = встроенный .squeeze (0)
            вывод = вывод.сжатие (0)
            weighted_encoder_rep = weighted_encoder_rep.squeeze(0)
            вывод = self.out(torch.cat((выход,
                                         weighted_encoder_rep,
                                         встроенный), тусклый = 1))
            вернуть вывод, decoder_hidden. squeeze(0)
    класс Seq2Seq(nn.Module):
        def __init__(я,
                     кодировщик: nn.Module,
                     декодер: nn.Module,
                     устройство: torch.device):
            супер().__инит__()
            self.encoder = кодировщик
            self.decoder = декодер
            self.device = устройство
        защита вперед (я,
                    источник: Тензор,
                    trg: тензор,
                    Teacher_forcing_ratio: float = 0,5) -> Тензор:
            batch_size = src.shape[1]
            max_len = trg.shape[0]
            trg_vocab_size = self.decoder.output_dim
            выходы = torch.zeros(max_len, batch_size, trg_vocab_size).to(self.device)
            encoder_outputs, скрытый = self.encoder (источник)
            # первым входом в декодер является токен 
            вывод = трг[0,:]
            для t в диапазоне (1, max_len):
                вывод, скрытый = self.decoder (выход, скрытый, encoder_outputs)
                выходы[т] = выход
                учитель_сила = random.random () < учитель_форсинг_коэффициент
                top1 = вывод. max(1)[1]
                вывод = (trg[t], если учитель_сила иначе топ1)
            возврат выходных данных
    INPUT_DIM = длина (de_vocab)
    OUTPUT_DIM = длина (en_vocab)
    # ENC_EMB_DIM = 256
    # DEC_EMB_DIM = 256
    # ENC_HID_DIM = 512
    # DEC_HID_DIM = 512
    # ATTN_DIM = 64
    # ENC_DROPOUT = 0,5
    # DEC_DROPOUT = 0,5
    ENC_EMB_DIM = 32
    DEC_EMB_DIM = 32
    ENC_HID_DIM = 64
    DEC_HID_DIM = 64
    ATTN_DIM = 8
    ENC_DROPOUT = 0,5
    DEC_DROPOUT = 0,5
    enc = кодировщик (INPUT_DIM, ENC_EMB_DIM, ENC_HID_DIM, DEC_HID_DIM, ENC_DROPOUT)
    attn = Внимание (ENC_HID_DIM, DEC_HID_DIM, ATTN_DIM)
    dec = Декодер (OUTPUT_DIM, DEC_EMB_DIM, ENC_HID_DIM, DEC_HID_DIM, DEC_DROPOUT, attn)
    модель = Seq2Seq(enc, dec, device).to(device)
    def init_weights(m: nn.Module):
        для имени, параметр в m.named_parameters():
            если "вес" в имени:
                nn.init.normal_(параметр.данные, среднее=0, стандартное значение=0,01)
            еще:
                nn.init.constant_(параметр.данные, 0)
    model.apply(init_weights)
    оптимизатор = optim.Adam(model.parameters())
    def count_parameters (модель: nn. Module):
        возвращаемая сумма (p.numel() для p в model.parameters(), если p.requires_grad)
    print(f'Модель имеет {count_parameters(model):,} обучаемые параметры')
     

    Выход:

     Модель имеет 3 491 552 обучаемых параметра.
     

    Примечание: при оценке эффективности модели языкового перевода в В частности, мы должны сообщить функции nn.CrossEntropyLoss , чтобы игнорировать индексы, где цель просто дополняется.

     PAD_IDX = en_vocab.stoi['']
    критерий = nn.CrossEntropyLoss(ignore_index=PAD_IDX)
     

    Наконец, мы можем обучить и оценить эту модель:

     import math
    время импорта
    поезд деф (модель: nn.Module,
              итератор: torch.utils.data.DataLoader,
              оптимизатор: optim.Optimizer,
              критерий: nn.Module,
              клип: поплавок):
        модель.поезд()
        эпоха_потеря = 0
        для _, (src, trg) в перечислении (итератор):
            src, trg = src.to(устройство), trg.to(устройство)
            оптимизатор.zero_grad()
            вывод = модель (источник, трг)
            вывод = вывод[1:]. view(-1, output.shape[-1])
            trg = trg[1:].view(-1)
            потеря = критерий (выход, trg)
            потеря.назад()
            torch.nn.utils.clip_grad_norm_(model.parameters(), клип)
            оптимизатор.шаг()
            epoch_loss += loss.item()
        вернуть epoch_loss / len (итератор)
    def оценить (модель: nn.Module,
                 итератор: torch.utils.data.DataLoader,
                 критерий: nn.Модуль):
        модель.eval()
        эпоха_потеря = 0
        с факелом.no_grad():
            для _, (src, trg) в перечислении (итератор):
                src, trg = src.to(устройство), trg.to(устройство)
                output = model(src, trg, 0) #отключить принуждение учителя
                вывод = вывод[1:].view(-1, output.shape[-1])
                trg = trg[1:].view(-1)
                потеря = критерий (выход, trg)
                epoch_loss += loss.item()
        вернуть epoch_loss / len (итератор)
    def эпоха_время (начальное_время: целое,
                   конечное_время: целое):
        прошедшее_время = время_окончания - время_начала
        прошедшее_минут = целое (прошедшее_время / 60)
        elapsed_secs = int (elapsed_time - (elapsed_mins * 60))
        вернуть истекшие_минуты, истекшие_секунды
    N_EPOCHS = 10
    КЛИП = 1
    best_valid_loss = float('inf')
    для эпохи в диапазоне (N_EPOCHS):
        start_time = время. время()
        train_loss = train (модель, train_iter, оптимизатор, критерий, CLIP)
        valid_loss = оценка (модель, valid_iter, критерий)
        end_time = время.время()
        epoch_mins, epoch_secs = epoch_time (начальное_время, конечное_время)
        print(f'Epoch: {epoch+1:02} | Time: {epoch_mins}m {epoch_secs}s')
        print(f'\tTrain Loss: {train_loss:.3f} | Train PPL: {math.exp(train_loss):7.3f}')
        print(f'\t Val. Loss: {valid_loss:.3f} | Val. PPL: {math.exp(valid_loss): 7.3f}')
    test_loss = оценка (модель, test_iter, критерий)
    print(f'| Потеря теста: {test_loss:.3f} | Тест PPL: {math.exp(test_loss):7.3f} |')
     

    Исходящий:

     Эпоха: 01 | Время: 0 м 58 с
            Потеря поезда: 5,763 | Поезд PPL: 318.278
             Вал. Потеря: 5,281 | Вал. чел.: 196 603
    Эпоха: 02 | Время: 0 м 58 с
            Потеря поезда: 4,777 | Поезд PPL: 118.805
             Вал. Поражение: 5.041 | Вал. Население: 154 694 человека
    Эпоха: 03 | Время: 0 м 59 с
            Потеря поезда: 4,526 | Поезд PPL: 92.411
             Вал.  Потеря: 4,935 | Вал. чел.: 139.111
    Эпоха: 04 | Время: 0 м 58 с
            Потери поезда: 4,367 | Поезд PPL: 78.774
             Вал. Проигрыш: 4.823 | Вал. чел.: 124.304
    Эпоха: 05 | Время: 0 м 58 с
            Потеря поезда: 4,249| Поезд PPL: 70.070
             Вал. Потеря: 4,766 | Вал. чел.: 117 415
    Эпоха: 06 | Время: 0 м 57 с
            Потери поезда: 4,174 | Поезд PPL: 64.978
             Вал. Потеря: 4,735 | Вал. Население: 113 907
    Эпоха: 07 | Время: 0 м 58 с
            Потери поезда: 4,065 | Поезд PPL: 58.237
             Вал. Поражение: 4,643 | Вал. Население: 103 859
    Эпоха: 08 | Время: 0 м 58 с
            Потеря поезда: 3,975 | Поезд PPL: 53.270
             Вал. Поражение: 4.606 | Вал. PPL: 100.102
    Эпоха: 09 | Время: 0 м 58 с
            Потери поезда: 3,913 | Поезд PPL: 50.069
             Вал. Потеря: 4.540 | Вал. PPL: 93.690
    Эпоха: 10 | Время: 0 м 58 с
            Потери поезда: 3.831 | Поезд PPL: 46.103
             Вал. Потеря: 4.499 | Вал. PPL: 89.940
    | Потеря теста: 4,477 | Тестовый PPL: 87,958 |
     

    Следующие шаги

    • Ознакомьтесь с остальными руководствами Бена Треветта, используя torchtext здесь
    • Следите за учебным пособием, используя другие функции torchtext вместе с nn. Transformer для языкового моделирования с помощью предсказания следующего слова!

    Общее время работы скрипта: ( 10 минут 5,766 секунды)

    Загрузить исходный код Python: torchtext_translation_tutorial.py

    Загрузить блокнот Jupyter: torchtext_translation_tutorial.ipynb

    Галерея, созданная Sphinx-003Gallery

    Reddit — Погрузитесь во что угодно

    Теперь все по адресу: http://www.reddit.com/r/russian/wiki/full_course

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

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

    Основы

    Лучший способ начать работу в Интернете — найти онлайн-курс и пройти его. http://learnrussian.rt.com/ отлично подходит для начинающих. http://www.russianlessons.net хорош для большого количества информации, немного неполной по отношению к более продвинутым частям, но, безусловно, стоит использовать в любом случае. Курсов гораздо больше, таких как MasterRussian, этот видеокурс и эти. Некоторые загружаемые курсы стоят денег, некоторые бесплатны (например, Принстон). По моему опыту цена мало коррелирует с качеством. Это все о том, что работает для вас. На r/LANL_Russian также есть отличные ссылки на боковой панели. У всех курсов есть пробелы, поэтому использование двух вместе действительно полезно.

    Я купил себе тетрадь и записал все, как на уроке. Я обнаружил, что это отлично подходит для закрепления этих концепций в моем сознании и является отличным справочником. Вы лично можете просто захотеть поработать, но вам нужно будет вернуться к этим концепциям, а без простой ссылки это может быть сложнее.

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

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

    Словарь

    Не пытайтесь запоминать слова, просто читая их со страницы. Это неэффективно и медленно. Хорошая новость заключается в том, что есть гораздо лучшие способы сделать это. Исследования показывают, что воспоминание, а не повторение, является гораздо более эффективным учителем. Я не считаю ни один из ранее упомянутых ресурсов особенно эффективным для обучения вас словам. Чтобы начать учить свои первые 500 или около того слов, используйте Memrise или Anki.

    Мемрайз

    Memrise — отличный онлайн-ресурс для изучения словарного запаса. Курс русского языка с самым высоким рейтингом там хороший. Memrise использует мнемонику и память, чтобы вы могли быстро запомнить много слов. При использовании Memrise убедитесь, что у вас есть «мем» (их термин для мнемоники), который работает на вас. Запомнить слово без мема сложнее. Я бы даже рекомендовал продолжать создавать свои собственные мемы после того, как Memrise будет готов. Memrise действительно укрепит ваш русско-английский язык, но если вас беспокоит англо-русская часть, просто пройдите каждый уровень с полоской бумаги, закрывающей русские слова на экране, и спускайтесь вниз. Используйте страницу курса и поливайте все свои растения КАЖДЫЙ ДЕНЬ.

    Анки

    Это полезная программа для карточек, которая делает то же самое, что и Memrise, но ее можно загрузить, и у нее даже есть приложение. Когда у вас есть Анки, вы должны начать с выбора колоды. Когда вы в курсе событий, этот действительно хорош, но не указан. Вам понадобится руководство, чтобы помочь вам использовать программу. Вы можете составить свою собственную колоду слов, с которыми вы регулярно сталкиваетесь.

    Курсы создаются пользователями и могут быть несовершенными, хотя уровень Anki очень высок. Как бы то ни было, оба эти способа — наилучший из возможных способов изучения слов, кроме еще одной техники, которую мы вскоре рассмотрим. Не используйте ни один из ресурсов пассивно; действительно постарайтесь подумать и сосредоточиться на слове, которое вы изучаете.

    Обратите внимание на то, как обе программы заставляют вас вспоминать как можно скорее после произнесения слова, а затем постепенно расширяют интервалы, через которые вас просят вспомнить слово. Возьмите эту технику и используйте ее, чтобы сделать себе несколько карточек. Напишите английский язык с одной стороны и русский язык с другой (вы также можете указать произношение). Теперь вы можете носить их с собой день за днем, запоминая другие слова, которые вы прочитали, когда у вас есть свободная минутка (у Anki есть приложение для смартфона, которое позволяет вам делать то же самое). У вас даже могут быть свои личные мемы для них. Если вы используете физические карточки, я бы порекомендовал купить несколько для использования, потому что просто нарежьте бумагу для печати, так как она довольно хрупкая и ее легко испортить. Лично я считаю, что лучше учусь, когда сосредотачиваюсь на своем столе, потому что я намного меньше отвлекаюсь.

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

    Многие люди совершают ошибку, изучая похожие и/или родственные слова одновременно. Если два слова относятся к одной и той же теме (например, фрукты), рассмотрите возможность их вкрапления во все ваше обучение. Есть некоторые исключения, такие как алфавит и цифры по очевидным причинам. В русском языке разные, но родственные существительные или формы одного и того же глагола могут звучать одинаково, например, цена и любить, поэтому их совместное изучение может привести к путанице, и каждый раз, когда ваш ум выбирает неправильное слово, проблема усугубляется до такой степени, что вы уже никогда не сможете отделить одно от другого. два. Если это два отдельных и различных понятия, вы более способны вспомнить правильное слово.

    Кроме того, запоминание слов в группах, которые образуют тип истории, может быть еще более эффективным. Например, ваши первые 5 слов в день, которые вы должны выучить, могут быть: стол, книга, кожа, тихий, здание. На самом деле они не относятся к одной и той же теме, но вместе образуют простое, но связное описание сцены. Источник

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

    • Поиск слов

    Google переводчик хорош, но крайне ненадежен. Если вы хотите понять предложение, вам лучше переводить отдельные слова. Для этого баб.ла очень и очень хороша.

    Сохраните переводы, к которым вы постоянно возвращаетесь, и создайте себе колоду на Anki. Не беспокойтесь о формах императива, которые не являются существенными (в отличие от давай) или отличаются, изучите формы глагола, и повелительное наклонение придет само собой.

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

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

    Грамматика

    Первые упомянутые курсы научат вас базовой грамматике, которую вам нужно будет понять и освоить в разумных пределах. Если вы заинтересованы в изучении большого количества грамматики, есть книги, такие как Penguin Russian. Хотя это не интересно, увлекательно или особенно хорошо для начинающих (подождите, пока у вас не будет около 500 слов), в нем есть все, что вам когда-либо может понадобиться, и поэтому это хороший ресурс, если у вас есть терпение. Вам придется купить его, но у меня есть PDF-форма, если вы хотите «попробовать». ПМ мне. Множество веб-сайтов предлагают помощь с русской грамматикой, например, RussianLearn и все вышеупомянутые курсы.

    Грамматика может быть довольно скучной. Многие люди почти не уделяют ему внимания, а вместо этого пытаются выучить его, используя язык естественным образом. Другие сосредотачиваются очень сильно на грамматике. Я не могу с уверенностью говорить об эффективности ни того, ни другого, потому что все люди разные. По общему мнению, попытка просто запомнить грамматику — это довольно быстрый способ заставить вас ненавидеть язык, но изучение грамматики через осмос требует много чтения и разговорной речи. Вероятно, лучше всего учиться, сочетая заучивание грамматики (или даже случайный взгляд, чтобы ознакомиться с концепцией) и погружение.

    Погружение

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

    • Чтение

    Купите несколько простых электронных книг на русском языке и вперед. Попытка читать русские книги — хороший способ научиться, когда у вас есть несколько слов. Для начала (до 1000 слов) вы столкнетесь со множеством незнакомых вам слов. Вот почему следует начать с книги, с которой вы знакомы. Даже если вы понимаете всего несколько слов в предложении, продолжайте читать книгу и не нарушайте ее. Любые повторяющиеся слова, которых вы не знаете, заинтересуют вас, и вы сможете найти их ПОСЛЕ. Позже вы, возможно, захотите поместить переведенные слова в Anki.

    Гарри Поттер великолепен: http://lib.rus.ec/b/351711/read Этот курс Memrise предназначен для совместного использования.

    Помимо чтения романов, найдите в Интернете материалы, относящиеся к вашим интересам, такие как новости, журналы или даже юмор.

    • СМИ

    Просмотр телепередач и фильмов, прослушивание радио и музыки — хорошие источники погружения. Есть сотни российских радиостанций. Радио «Маяк» — это станция, которую я слушаю, и она довольно популярна. Подкасты тоже помогают. Поиск фильмов и сериалов может быть затруднен. wwiTV ссылается на кучу телеканалов в прямом эфире.

    • Говорящий

    Речь — это нечто совершенно отличное от изучения слов или грамматики, и она не поддается обучению, если вы сидите здесь и учитесь на веб-сайтах. Если у вас нет причин говорить по-русски, вы и не будете, и все эти часы, потраченные на изучение лексики и грамматики, вылетят в окно, как только кто-то впервые скажет вам что-то по-русски. Находясь в Интернете, это усложняет задачу, но есть способы обойти это…

    • Языковые друзья

    Лучший способ заговорить — это найти собеседника, который является носителем вашего изучаемого языка, и поддерживать с ним регулярные контакты. Если вы знаете кого-то в реальной жизни, это прекрасно, свяжитесь с ним и попросите научить вас и помочь вам говорить. Если вы делаете это в Интернете, есть много ресурсов и много россиян, которые действительно хотят выучить английский по Skype. Я нашел свой на форуме Skype, но есть и другие места, такие как MyLanguageExchange и SharedTalk. Время, потраченное на то, чтобы обучить его более точным аспектам английского языка и, в свою очередь, получить более интерактивный источник знаний, было бесценным для нас обоих, и в то же время я получил побуждение немного подумать о своем родном языке, особенно в отношении грамматика. Если у вас общие интересы, это поможет лишь немного, потому что два языка предоставляют такой огромный спектр тем и разговоров. Поскольку вы собираетесь быть новичком, ищите кого-то среднего или опытного, но ищущего регулярную практику, для них обучение вас БУДЕТ практикой, и любое понимание английского языка, которое вы можете предложить, является бонусом. Этот метод очень хорош для мотивации и ускорения обучения. я считаю основной .

    Не утруждайте себя ожиданием того, что вы будете «готовы» или «улучшитесь», прежде чем найти приятеля по языку. Нет такого понятия. Нет момента, когда вы будете готовы начать говорить. Если они понимают и говорят на достаточном уровне по-английски, вы готовы. Не беспокойтесь и о темах для разговора. Если вы не говорите об аспектах ваших соответствующих языков (что происходит в большинстве случаев), речь может идти о культурных различиях. Вы многого не понимаете в России, так что не стесняйтесь спрашивать их об этом. Человек, которого я добавил в Skype, и я много разговаривали с помощью текстовых сообщений, и у нас никогда не заканчивались темы для разговора.

    • Самостоятельная практика

    Даже если у вас есть приятель по языку, у Pimsleur есть хороший аудиокурс, который научит вас основам разговорного русского, используя интервальные повторения и симулированные разговоры. Это хорошо для того, чтобы заставить вас говорить и произносить по-русски, может быть скучно и хлопотно, если у вас нет регулярного времени, когда вы находитесь в одиночестве, например, в поездках на работу. Это стоит больших денег. Если вы хотите попробовать это, PM мне для получения дополнительной информации. Есть и другие аудиокурсы, но я их не знаю.

    Удержание процентов

    Сохранение интереса — это метод изучения языка сам по себе, и он гораздо важнее, чем люди думают. Если вам станет скучно (а так и будет), есть способы возобновить вашу мотивацию. Если вы начинаете в период небольшой работы над чем-то, отлично, но все становится сложнее, когда работы накапливается. Некоторые люди сдаются. Я не могу дать вам идеальный способ сохранять интерес. Все разные.

    Найдите что-то, что вам нравится в языке, и запомните это, и/или свяжите свое изучение языка с предметами, которые вас интересуют. Найдите ресурсы, которые можно попытаться прочитать по интересующей вас теме. Интернет-журналы, новости и видео — все это полезные инструменты. Если вы не пользуетесь преимуществами знания русского языка где-то, вы потеряете интерес. Если вы окружите себя средствами массовой информации, посвященными русскому языку, у вас всегда будет мотивация вернуться к книгам и продолжить обучение. Найти неподдельный интерес и любопытство в понимании языка.

    Еще один способ не забывать о русском языке — часто изучать r/russian и r/languagelearn.

    Ввод

    Если вы просто случайно интересуетесь русским языком, многие веб-сайты предлагают функцию, которая переводит вашу клавиатуру в русский формат, например этот.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *