Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unable to approximate the sine function using a neural network

Tags:

I am trying to approximate the sine() function using a neural network I wrote myself. I have tested my neural network on a simple OCR problem already and it worked, but I am having trouble applying it to approximate sine(). My problem is that during training my error converges on exactly 50%, so I'm guessing it's completely random.

I am using one input neuron for the input (0 to PI), and one output neuron for the result. I have a single hidden layer in which I can vary the number of neurons but I'm currently trying around 6-10.

I have a feeling the problem is because I am using the sigmoid transfer function (which is a requirement in my application) which only outputs between 0 and 1, while the output for sine() is between -1 and 1. To try to correct this I tried multiplying the output by 2 and then subtracting 1, but this didn't fix the problem. I'm thinking I have to do some kind of conversion somewhere to make this work.

Any ideas?

like image 221
MahlerFive Avatar asked Oct 14 '09 09:10

MahlerFive


People also ask

How do you approximate the sine function?

f(θ) = ap(θ) 1 + b p(θ) , 0 ≤ θ ≤ 180. 8100 = 4θ(180 − θ) 40500 − θ(180 − θ) . This gives Bhaskara's approximation formula for the sine function. Bhaskara's Approximation Formula: sin(θ◦) ≈ 4θ(180 − θ) 40500 − θ(180 − θ) , for 0 ≤ θ ≤ 180.

What is approximation error neural network?

Approximation error refers to the distance between the target function and the closest neural network function of a given architecture and estimation error refers to the distance between this ideal network function and an estimated network function.

Can machine learn the concept of sine?

In our experiments we see that the models all learned the general shape of sine function, but failed to generate future data points at a frequency outside of the training range.

What is function approximation problem?

In general, a function approximation problem asks us to select a function among a well-defined class that closely matches ("approximates") a target function in a task-specific way.


1 Answers

Use a linear output unit.

Here is a simple example using 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

like image 138
rcs Avatar answered Oct 19 '22 23:10

rcs