Какой еще модуль.
Выше написал.
Ну ясно
function Double.Operator Implicit(v: Double): Int32;
begin
try
Begin
Result := Convert.ToInt32(v);
End;
Except
on e: Exception do
Begin
End;
End;
end;
А так ещё веселее: (ConvNetABC_Test.pas)
Uses ConvNetABC;
Uses System;
{Procedure PrintVol(v: Vol);
Begin
For Var y:=0 to v.Height-1 do
Begin
For Var d:=0 to v.Depth-1 do
Begin
For Var x:=0 to v.Width-1 do
Begin
Console.Write(v.Get(x, y, d).ToString() + ' ');
End;
Console.Write(' ');
End;
Console.WriteLine();
End;
End;}
var Return_V: Boolean;
var V_Val: Double;
var random: Random := new Random(3);
function GaussRandom(): Double;
begin
if (Return_V)
Then
begin
Return_V := false;
Result := V_Val;
exit;
end;
var u: Double := 2 * random.NextDouble() - 1;
var v: Double := 2 * random.NextDouble() - 1;
var r: Double := (u * u) + (v * v);
if ((r = 0) or (r > 1))
Then
begin
Result := GaussRandom();
exit;
end;
var c: Double := Math.Sqrt(-2 * Math.Log(r) / r);
V_Val := Double(v * c);
Return_V := true;
Result := Double(u * c);
exit;
end;
function Randn(mu: Double; std: Double): Double;
begin
Result := mu + GaussRandom() * std;
exit;
end;
Begin
{Var a:=new Vol(2, 2, 2);
PrintVol(a);
Var Sigm:=new SigmoidLayer(2, 2, 2);
Var b:=Sigm.&Forward(a, true);
PrintVol(b);}
Console.WriteLine(Randn(-10.0, 10.0));
Console.WriteLine(Randn(-10.0, 10.0));
Console.WriteLine(Randn(-10.0, 10.0));
End.
Исправил преобразования и всё запустилось. Спасибо, @MrFresnel, @ibond. Разбираться с переполнением буду потом.
А библиотека начала нормально работать, скоро опубликую официально
Можете поподробнее о библиотеке рассказать?
Библиотека для построения и обучения свёрточных и полносвязных нейросетей. Если извернуться, можно и такое замутить.
Хотел бы, но только после тестирования и реализации некоторых примеров.
Понятно. Название как-бы на это намекает, так как содержит 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. Возможно, для обсуждения нововведений потребовалась отдельная тема, чтобы не засорять первую, посвященную исключительно сообщению нововведений и улучшений пользователям.