Библиотека для построения и обучения свёрточных и полносвязных нейросетей. Если извернуться, можно и такое замутить.
Хотел бы, но только после тестирования и реализации некоторых примеров.
Понятно. Название как-бы на это намекает, так как содержит ABC, характерное для имён стандартных модулей.
Да, но вот когда руки дойдут до TensorFlowABC (по аналогии с TensorFlowJS)…
Когда мы с разработчиками вели разговор о включении в дистрибутив библиотеки, известной сейчас как NumLibABC, в частности, @Admin обратил мое внимание, что модули библиотеки максимально должны использовать современные приемы программирования и быть примером реализации алгоритмов именно средствами PascalABC.NЕТ, а не просто набором программ. Ваш код сейчас - это сишный слепок, который плохо читается и содержит чересчур много обращений в .NET вместо средств, реализованных непосредственно в языке. (те же Console.WriteLine вместо Println). Мне, конечно, все равно, что Вы там и как пишете (моя бы воля - я бы давал Ваш код читать в качестве наказания для изучающих Паскаль), но имейте в виду, что и Вам могут сказать то же, если захотите попытаться сделать свою библиотеку стандартной.
@Gleb, могу сказать следующее (по оформлению) на примере одного .pas файла.
- Код плохо стандартизирован, хотя, если это сырая версия, то тогда ладно.
unit Converters;
Uses System; // <-- Нет никакого разделения между uses и остальным содержимым файла, слеплено.
class // <-- Почему на отдельной строке?
function Double.Operator Implicit(v: Double): Int32;
begin
try
Begin // <-- Лишние begin-end.
Result := Convert.ToInt32(v);
End;
Except
on e: Exception do // <-- Переменную, конечно, использовать можно, но зачем?
Begin
End;
End;
end; // <-- Почему два оператора слеплены и нет никакого разделения между ними (пустой строки)?
class // <-- Почему на отдельной строке?
function Single.Operator Implicit(v: Single): Int32;
begin
Result := Convert.ToInt32(v); // Можно использовать краткий синтаксис объявления операторов с использованием :=.
end;
End.
.
- В рекомендациях по C# было правило:
Необходимо использовать именования типов C#, а не .NET common type system (CTS).
, применительно к PascalABC.Net это, к примеру, означает, что следует использовать не System.Int32, а integer.
- Много проблем в плане стиля написания идентификаторов, ключевых слов.
- Также, не надо переносить then на новую строку, это затрудняет чтение кода.
Версия ещё сырая. Надо добавить ещё много чего.
Главное, чтобы оно не целый день с ним считалось. Применение переадресаций (PABCSystem.Sqrt() вместо System.Math.Sqrt()) сильно замедляет код и делает его более зависимым от версии среды. По мимо того, я уже не помню и половины “стандартного Паскаля”. Времени на восстановление его в памяти и переписывание кода уйдёт просто уйма.
Я бы рекомендовал создать отдельную тему и вести историю версий - сообщать о нововведениях и улучшениях в каждой новой версии библиотеки, как это сделал, например, @RAlex в отношении NumLibABC. Возможно, для обсуждения нововведений потребовалась отдельная тема, чтобы не засорять первую, посвященную исключительно сообщению нововведений и улучшений пользователям.
Сделайте проще: посмотрите на PABCSystem.pas. Он является примером чисто .NET кода. Я не вижу проблемы в использовании .NET. Про Integer ещё согласен. Тема по обновлениям будет. Оформление кода также исправлю.
Не Вам. С Вами я полностью согласен, за исключением случая с then.
Если под средствами имеются ввиду стандартные модули, то они немногочисленны и не могут дать весь функционал, который предоставляет .Net Framework. Смешивать средства, предоставляемые стандартными модулями, со средствами .Net Framework - хорошее решение. Отказываться от стандартных модулей, что называется на отрез, не стоит, так как они предназначены в некотором смысле для упрощения кода. Но, в то же время пользоваться исключительно ими - плохой вариант, так как существует широкий круг задач, которые им не под силу.
Вам удобней писать then на отдельной строке? Если да, то почему?
Мне лично так читать проще.
begin
View3D.Title := 'мисли';
var шарик := Sphere((1 * 2), 0, 0, 1);
Graph3D.OnMouseDown += procedure (x, y, mb) -> begin
объект3Д := FindNearestObject(x, y);
if объект3Д = шарик then
begin
end;
объект3Д := nil;
end;
end;
елки палки, вырезал половину кода, убрал 5ти мерные массивы, существенно все оптимизировал и упростил. Но вот это место в 3д все равно тормазит при клике мышью на шарик! ??? что тут не так-то?
Ваш код не компилируется, хотя бы потому что:
- Отсутствует uses Graph3D.
- ; после последнего end, вместо .
-
объект3Д := FindNearestObject(x, y);
- нет var.
Рабочая (компилируется) версия:
uses Graph3D;
begin
View3D.Title := 'мисли';
var шарик := Sphere((1 * 2), 0, 0, 1);
Graph3D.OnMouseDown += procedure (x, y, mb) -> begin
var объект3Д := FindNearestObject(x, y);
if объект3Д = шарик then
begin
end;
объект3Д := nil;
end;
end.
. Не это ли Вам нужно (удаление шарика):
uses Graph3D;
begin
View3D.Title := 'мисли';
var шарик := Sphere((1 * 2), 0, 0, 1);
Graph3D.OnMouseDown += procedure (x, y, mb) -> begin
var объект3Д := FindNearestObject(x, y);
if объект3Д = шарик then
шарик.Destroy();
end;
end.
?
о спасибо, это тоже пригодиться.
Сам код это кусок программы, просто может я что-то не так делаю, почему он так тормозит? комп виноват? или накосячил где-то и в упор не вижу? Может опрос мышки не правильный?
если несколько раз по шарику покликать вообще иногда зависает.