Не мог приблизить синусоидальную функцию с помощью нейронной сети

метка записала:

это заказывает им основу на времени выполнения, возможно, необходимо ли отсортировать методы? участники источника/вида

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

Модульные тесты должны быть созданы независимо, и это случайно, как их называет UnitRunner.

В большинстве случаев, методы тестирования отсортированы в алфавитном порядке. Классы случайны. Попытайтесь использовать TestSuite для упорядочивания тестов.

22
задан nbro 9 March 2019 в 09:28
поделиться

3 ответа

Используйте модуль линейного вывода .

Вот простой пример использования R :

set.seed(1405)
x <- sort(10*runif(50))
y <- sin(x) + 0.2*rnorm(x)

library(nnet)
nn <- nnet(x, y, size=6, maxit=40, linout=TRUE)
plot(x, y)
plot(sin, 0, 10, add=TRUE)
x1 <- seq(0, 10, by=0.1)
lines(x1, predict(nn, data.frame(x=x1)), col="green")

neural net prediction

16
ответ дан 29 November 2019 в 05:24
поделиться

Когда вы тренируете сеть, вы должны нормализовать цель (функция sin) до диапазона [0,1], тогда вы можете сохранить сигмовидную передаточную функцию.

sin(x) in [-1,1]  =>  0.5*(sin(x)+1) in [0,1]

Train data:
    input    target    target_normalized
    ------------------------------------
    0         0          0.5
    pi/4      0.70711    0.85355
    pi/2      1           1
    ...

Обратите внимание, что это мы нанесли на карту цель до обучения. После обучения и моделирования сети можно отобразить выходные данные сети.


Ниже приведен код MATLAB для иллюстрации:

%% input and target
input = linspace(0,4*pi,200);
target = sin(input) + 0.2*randn(size(input));

% mapping
[targetMinMax,mapping] = mapminmax(target,0,1);

%% create network (one hidden layer with 6 nodes)
net = newfit(input, targetMinMax, [6], {'tansig' 'tansig'});
net.trainParam.epochs = 50;
view(net)

%% training
net = init(net);                            % init
[net,tr] = train(net, input, targetMinMax); % train
output = sim(net, input);                   % predict

%% view prediction
plot(input, mapminmax('reverse', output, mapping), 'r', 'linewidth',2), hold on
plot(input, target, 'o')
plot(input, sin(input), 'g')
hold off
legend({'predicted' 'target' 'sin()'})

network output

12
ответ дан 29 November 2019 в 05:24
поделиться

Нет причин, по которым ваша сеть не должна работать, хотя 6 определенно находится на низком уровне для приближения к синусоиде. Я бы попробовал хотя бы 10, может быть, даже 20.

Если это не сработает, то я думаю, вам нужно подробнее рассказать о своей системе. т.е. алгоритм обучения (обратное распространение?), скорость обучения и т. д.

0
ответ дан 29 November 2019 в 05:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: