Помощь новичкам


#679

А, извиняюсь, всё там в порядке. Это я ошибся. Сегодня как то плохо соображаю…


#680

Не публикуйте в Issue


#681

Спасибо, я о том, что в отличие помощи в VBA/TP, в самой справке фактически нет примеров как (1) правильно и (2) для чего можно использовать конкретную функцию или команду. Быть может, как компромисс, можно в справке добавлять ссылки на внешние примеры?

Ещё пара вопросов–

1) Какой самый негрузный способ для таймера или срабатывания приблизительно в определённое время (± десяток секунд)?

2) Пока штудирую WriteableBitmap и просматриваю примеры, но как в PABC .NET лучше использовать 2D “поверхности” (canvas/surface) для достижения многослойности (параллакса)?

Благодарю


#682

Та её в принципе переделать надо…

Я лично использую такой алгоритм:

procedure Tick;
begin
  //тут то что должно выполнятся через равные промежутки времени
end;

procedure Cycle;
begin
  var tps := 65;//tick's per second
  var wv := 1000 / tps;//миллисекунд на цикл
  var ts := System.TimeSpan.FromMilliseconds(wv);//промежуток времени на 1 тик
  var mts := System.TimeSpan.FromMilliseconds(wv * 3);//максимальное запаздывание
  
  var lt := System.DateTime.Now;//точка во времени, когда осуществлялась последняя перерисовка
  
  while true do
  begin
    Tick;
    
    //ждём минимального времени на перерисовку
    while System.DateTime.Now - lt < ts do System.Threading.Thread.Yield;
    lt := lt + ts;//переставляем точку последнего тика на длинну 1 тика вперёд во времени
                  //можно и lt := System.DateTime.Now, но тогда будет игнорировать запаздывание
    
    
    
    //если начали запаздывать слишком сильно - надо сбросить часть запаздывания, чтоб когда отлагало - не вызвало Tick несколько тысяч раз подряд
    var t := System.DateTime.Now;
    while t - lt > mts do
      lt := lt + ts;
    
  end;
end;

begin
  var cyc_thread := new System.Threading.Thread(Cycle);
  cyc_thread.IsBackground := true;//программа завершается когда все не_фоновые потоки завершились
  cyc_thread.Start;
end.

Прекрасно подходит для тайминга графики (тогда Tick это 1 перерисовка), погрешность = 0, потому что если какой то тик сработал позже на миллисекунду, то следующий сработает на столько же раньше (если не считать погрешностей при работе с числами с плавающей запятой, которая тут ооочень мала).

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


#683

Кто нибудь знает, как инвертировать операцию, преобразующую двумерный массив в матрицу Грама? То есть я получил матрицу Грама для матрицы, обработал её, и преобразую обратно в матрицу.


#684

А можно код?


#685

Код чего? Я могу привести код только прямого преобразования, он на Паскале.

function GramMatrix(Input: Vol): Vol;
begin
  Result := new Vol(Input.Depth, Input.Depth, 1, 0);
  for Var d := 0 to Input.Depth - 1 do
    for Var _d := 0 to Input.Depth - 1 do
    begin
      var Sum: Single;
      for Var y := 0 to Input.Height - 1 do
        for Var x := 0 to Input.Width - 1 do
          Sum += Input.Get(x, y, d) * Input.Get(x, y, _d);
      Result.Set(_d, d, 0, Sum);
    end;
end;

Vol - это трёхмерный массив. Вроде бы как правильно, но вот в оригинале там чуть иначе:

# Function to get the gram matrix used to calculate style loss
def gram_matrix(x, area, depth):
    # Equation 3 of the paper
    F = tf.reshape(x, (area, depth))
    G = tf.matmul(tf.transpose(F), F)
    return G

tf - TensorFlow. Паскалевский вариант делал по определениям в Википедии, поэтому, вероятнее всего, он верен. Делаю нейросеть, где сравнение ведётся по матрицам Грамма, то есть мне не хватает обратного прохода через это преобразование.


#686

Тут даже приведу цитату из статьи, где об этом было написано:

И вот мы добрались до самого интересного: а как же нам передать стиль? Что такое стиль? Очевидно, что стиль — это не то что мы оптимизировали в Content Loss’е, ведь там содержится много информации о пространственных положениях фичей. Так что первое, что нужно сделать, — это каким-либо способом убрать эту информацию из представлений, полученных на каждом слое. Автор предлагает следующий способ. Возьмем тензор на выходе из некоторого слоя, развернем по пространственным координатам и посчитаем матрицу ковариации между плашками. Обозначим это преобразование как G. Что мы на самом деле сделали? Можно сказать, что мы посчитали, как часто признаки внутри плашки встречаются попарно, или, другими словами, мы аппроксимировали распределение признаков в плашках многомерным нормальным распределением. https://habrastorage.org/files/e91/458/e96/e91458e9695f4ac290d5ce67ca0d6ac9.png Тогда Style Loss вводится следующим образом, где s — это некоторое изображение со стилем: https://habrastorage.org/files/e25/dfe/3f0/e25dfe3f0ad14c499568b77a236c31d9.gif Попробуем для Винсента? Получим в принципе что-то ожидаемое — шум в стиле Ван Гога, информация о пространственном расположении фичей полностью потеряна.

(https://habr.com/company/mailru/blog/306916/)


#687

#688

люди, ткните пальцем где в pascalABC.NET написано о том, что нет типизированных констант, когда то попадалось на глаза, а где, ну не могу найти и все тут


#689

А что Вы называете типизированной константой? Если Вы об объявлении в секции const, то все есть в Справке:

const
Rec: record name: string; age: integer end = (name: 'Иванов'; age: 23);

#690

Я вот про что:

const
  c: byte = 5;
begin
  c := 10;
  write(c);
end.

это работает в фрипаскале, но не в абц, вроде где-то было про это написано, да где…


#691

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


#692

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


#693

Ну как это не работает если работает =). Запустите этот код в freepascal, увидите.


#694

Ну баг фрипаскаля. Мы-то тут причем?


#695

Ну баг, так баг, вам лучше знать. Но я не спрашивал почему, я спрашивал где что-то об этом написано у вас. Наверное мне показалось. А такой вопрос, этот код рабочий или тут тоже баг?

type
  DayOfWeek = (Mon, Tue, Wed, Thu, Fri, Sat, Sun);
  Budni = Mon..Fri;

begin
  var weekday: Budni := Sun;
  Println(weekday); //Sun
end.

#696

Блин :frowning: че-то у меня все плохо, не получается. Что уже только не перепробовал.

Как правильно, быстро, брать и записывать данные из этого вот: (на данный момент, в работающем варианте, я использую аж 4 массива)

Вот, что мне нужно: Что-то типа базы данных или не знаю как такое правильно обозвать. И чтоб оно по минимуму жрало память.

Есть нейроны (экспериментирую короче), чтоб обратиться к нейрону нужно указать:

1 - его слой (тут чуть чуть не просто, это как-бы 4х мерный слой)

2 - его место в слое х y z (т.е. грубо говоря один слой это куб) (такая сложность нужна, для образование связей между нейронами находящимися пространственно рядом, подробней долго объяснять это все связано с 3д распознаванием, моделированием) (т.е. грубо говоря адрес состоит из 4х чисел)

после обращения по адресу нейрона

нужно вытаскивать три 2х мерных массива и два одномерных, динамически плавающих

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

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

Как по нормальному все это реализовать?


#697

Да, он работает в PascalABС.NET, хоть и противоречит идее использования перечислимых и диапазонных типов. Нет проверки на допустимость, говорят, она сильно увеличивает накладные расходы.


#698

Приведите код которым вы пытались это решить.

И постарайтесь, пожалуйста, писать покультурнее. Без “херни” и т.п.