функции f и вызывается с другими объектами типа torch::Tensor
def data_points(data):
'''
Wrapper for data points
'''
def middle(func):
def wrapper(*args, **kwargs):
return func(data, *args, **kwargs)
return wrapper
return middle
Функция, которая является аргументом
def f(t, p):
return p[0] * torch.exp(-t / p[1]) + p[2] * t * torch.exp(-t / p[3])
Второй аргумент - одномерный тензор
x_true = torch.linspace(0, 100, 25) # span of of free parameter
Вывод x_true:
tensor([ 0.0000, 4.1667, 8.3333, 12.5000, 16.6667, 20.8333, 25.0000,
29.1667, 33.3333, 37.5000, 41.6667, 45.8333, 50.0000, 54.1667,
58.3333, 62.5000, 66.6667, 70.8333, 75.0000, 79.1667, 83.3333,
87.5000, 91.6667, 95.8333, 100.0000])
Вызов функции:
modified_f = data_points(x_true)(f) # wrapped function (dependent on only parameters)
Вывод modified_f после выполнения:
tensor([ 59.7824, 287.5080, 483.8714, 652.0930, 795.0991, 915.5480,
1015.8528, 1098.2018, 1164.5790, 1216.7806, 1256.4327, 1285.0048,
1303.8247, 1314.0905, 1316.8820, 1313.1718, 1303.8341, 1289.6548,
1271.3375, 1249.5135, 1224.7472, 1197.5410, 1168.3440, 1137.5541,
1105.5253])
Как мне этот кусок кода перенести на с++? Начал так:
torch::linspace(0, 100, 25)
static torch::Tensor f(torch::Tensor t, torch::Tensor p) {
return p[0] * exp(-t / p[1]) + p[2] * t * exp(-t / p[3]);
}
В апи про torch::linspace
Creates a one-dimensional tensor of size steps whose values are evenly spaced from start to end, inclusive. That is, the value are:
start (float) – the starting value for the set of points
end (float) – the ending value for the set of points
steps (int) – size of the constructed tensor
Нужно правильно написать функцию, которая будет умножать (вроде бы) одномерный тензор на функцию f
Мне подсказали так, но мне нужно, чтобы был объект типа torch::Tensor, и при передачи в объект класса компилятор ругается на лямбду и код не работает
template <class Data>
auto data_points(Data data) {
auto middle{[data](auto func) {
return [data, func](auto... args) { return func(data, args...); };
}};
return middle;
}
Там в чате по питону понимают в типах на с++, лямбах, плюсовых API?
Обсуждают сегодня