Предлагаю размещать здесь свои Open Source разработки, написанные на PascalABC.NET.
MnistNet. Демонстрационная программа, показывающая возможности свёрточных нейронных сетей. Позволяет распознавать рукописные цифры.MnistNet.zip (141,7 КБ)
Перевод README.md
с гитхаба:
Маленькая олдскульная игра. Вы играете за и бегаете от , в бесконечных пещерах. Когда вы не двигаетесь - время останавливается. Не потому что мне нравится “Super hot”, а потому что это было легче реализовать.
Движение: стрелочки; Получите как можно больше очков (шагов). Если вы умираете - вы получаете грустный экран:
Перевод README.md
с гитхаба:
От создателей “CA” и “GA”! (то есть меня)
Новый шедевр (нет) - E&W A!!!
Правила простые. Вы вводите сложность (целое число). Приложение начнёт создавать меседжбоксы с ошибками. Вам надо их закрывать. И как можно быстрее. Их количество будет равно уровню сложности.
Осторожно! Там есть ловушка! Кнопка “Справка”!!! Все кнопки закрывают меседжбокс, но не “справка”. Я думал убрать её, но потом решил что без неё слишком легко.
Если вы будете умны, возможно вы побьёте мой рекорд :
Макропроцессор Трак Т64. Код в директории ABC. Он долго по разным версиям Паскаля путешествовал, вот дошёл до PascalABC NET. Правда, я достаточно недавно его перевёл, в отличие от версий Дельфи и Лазарус которые там есть. Так что не особо протестирован. Блок с различными кодировками вообще пришлось убрать, так как не особо разобрался, как можно поддерживать сразу три: OEM, Windows и Utf-8.
Язык достаточно интересный. Например, тут как раз был вопрос про всякие Repeat, While - у него таких проблем нет, так как подобные конструкции определяются не заранее, а прямо на самом языке: while.trac в директории examples тому пример.
А можете добавить подробное описание что и как делать в README, что запускать и что куда вставлять. Я попробовал поискать в интернете, нашёл кучу вещей названых TRAC, но ни 1 из них не была языком программирования…
Там же в первой строчке описания проекта указана статья в википедии
В ней описание, ссылки и даже объяснения по поводу дубляжа названий. Они даже не поленились найти копии стёртых станиц в веб архиве. Кидать всё это себе в каталог как-то не очень законно, а пересказывать своими словами не понятно зачем. Так что в директории doc проекта только список команд и отличий.
Сама программа ABC/TRAC4Z.pas заодно показывает как определить новую функцию HelloWorld и вызывать макропроцессор.
Если даже в коротеньком readme не обратили внимание или просто не пошли по ссылке в первой строчке, то какой смысл в подробном?
Я заглянул в википедию, в examples
и doc
, и нашёл тестовый Hello World. Когда я смотрел в википедии - я не догадался посмотреть в ссылках. Но и теперь, когда я пролистал пару первых .pdf
файлов для самообучения, остаётся вопрос, который у меня был в самом начале. Как происходит ввод-вывод? Я пытался запускать строчки из примеров, записывая их в поле ввода, которое появляется когда запускаешь ABC\TRAC4Z
, но ничего не выводит.
Когда запускаете TRAC4Z.exe реализуется так называемый REPL
Он выводит приглашение (которое можно поменять програмно, по умолчанию - кавычка) и ждёт конца ввода, который тоже задаётся тем-же символом - так можно ввести многострочное выражение, если был введён перевод строки, он выдаст / чтобы было понятно, что ввод не закончен.
Например можно ввести после ‘
#(ds,name,User)’
Потом для проверки #(name)’
Должно напечатать
User
Чтобы не маяться с вводом введена нестандартная функция lf для чтения программы с диска.
#(lf,factorial.trac)’
Дле окончания набирается #(st)’ - это тоже не совсем стандарт, в оригинале #(hl) от Halt, но к тому времени кода я об этом узнал , hl у меня уже было занято под “начало списка” head of list
Вот тут ещё есть перевод на русский в директории doc (TRAC на js, no comment )
Возвращаясь к нейронной сети для распознования цифр.
При компиляции исходника PascalABC NET 3.3.5.1662 выдаёт ошибку
MnistNet.pas(197) : Абстрактный класс не может иметь атрибут sealed
Но при этом создаёт работающий исходник. Если убрать Sealed Abstract, компилируется без ошибки и тоже работает. Там описания никакого нет и комментариев. Так что для меня это было почти как closed source - сложно разобраться.
Просто, как раз недавно разбирался с подходами к использованию нейронных сетей на Pascal, даже TensorFlow собрал и запустил его как динамическую библиотеку из Lazarus. Ещё пытался понять, можно ли в принципе по похожей схеме подключить к PascalABC NET. Тут у меня совсем нет опыта, но нашёл статью о библиотеке для Дельфи, где было написано, что она основана на структуре библиотеки TensorFlow для C#. Значит для языков .NET это в принципе возможно.
Об этом недавно говорили, договорились на том что в паскаль введут static
вместо sealed abstract
. Вот ждём. Я пока заменяю sealed abstract
на {static}
.
А это конечно плохо… @Gleb, у вас ведь там важны исходники больше чем то как выглядит готовый .exe
… Мне тоже, наверное, скоро понадобится кое для чего, добавьте комментарии пожалуйста. И если возможно, залейте на гитхаб-о подобный сайт, чтоб вы могли обновлять файлы, не меняя ссылку (через месяц после создании сообщения его нельзя изменять).
Да там есть такое. Код писался на январской версии, следовательно на тот момент это было единственное обозначение для статического класса.
А вот тут попрошу поподробнее, даже инструкцию Может, Алису на Паскале сварганить?
Как можно видеть из MnistNet, возможно даже написать все инструменты с нуля на чистом .NET(C# либо PascalABC.NET без PABCSystem.pas). Думаю, Вы увидели из кода, что использовался ЧИСТЫЙ .NET без дополнительных библиотек, даже паскалевских, значит перед разработчиками(то бишь нами) открыты колоссальные возможности для оптимизации, которые позволят в конкретных продуктах даже обойти Google с их C++ или TypeScript(у меня уже есть разработка, по некоторым критериям превосходящая Google). А посему предлагаю использовать TensorFlow и подобные ML библиотеки только для обучения и извлечения из их исходников алгоритмов и переписывания на Pascal. В качестве простой ML(Mashine Learning) библиотеки можно использовать ConvNetCS. Это библиотека, написана на C# имеет открытый исходный код.
Ещё одна моя разработка - приложение для восстановления выцветших фотографий, ColorRestorer.
=> ColorRestorer.zip (169,0 КБ)
Код также доступен на GitHub по следующей ссылке: https://github.com/PABCSoft/ColorRestorer.
Также по теме обработки изображений: автоматическое окрашивание методом тов. Welch. Его работу можно найти по следующей ссылке: http://www.cse.iitd.ernet.in/~pkalra/col783/colorize.pdf. По сути программа перекладывает цвет с одного изображения на другое по специальному статистическому алгоритму. Также должен предупредить, что алгоритм имеет некоторые элементы случайности, поэтому результаты с одними и теми-же входными данными могут быть разными, следовательно, можно несколько раз произвести операцию окрашивания, не меняя входные данные, чтобы добиться наилучшего результата.
+ => Код доступен на странице PABCSoft в GitHub: https://github.com/PABCSoft/ColorShifter. Данная программа уже демонстрировалась на нескольких конференциях и была отмечена жюри.По обработке изображений у меня есть ещё одна Open Source программа - ImageEngraver. Эта программа использует один из фильтров первого свёрточного слоя нейросети VGG16 для наложения на изображение эффекта гравюры.
=> Разработка доступна в GitHub: https://github.com/PABCSoft/ImageEngraver.Есть ещё одно приложение: PABCPlayer. Это простой медиаплеер, написанный для демонстрационных целей.
Код доступен на GitHub: https://github.com/PABCSoft/PABCPlayer.В связи со всякими там образцами как-то вдруг образовался релиз TRAC4 4.27.1 Лежит на GitHub всё там-же. TRAC4 (он же MACAR) в основном и отличался от TRACТ T64 образцами и списками. Кстати, этот вариант был лет 30 назад написан. Новый релиз пришлось делать, так как оказалось что из-за мелкого бага в программе, PascalABC.NET версия выдавала … range check error который таки был отключён всюду кроме ABC, где его и поймали.
Там добавлено три примера: match.trac (вводится match на основе примитива te), def_pets.trac - пример определения образцов с таким match (сама идея примера из Википедии где подобное описано для OCaml). Ну и тест таких образцов в test_pets.trac. То есть, если эти три файла лежат в директории с exe, то после запуска достаточно набрать #(lf,test_pets.trac)’