I have to extract a specific curve from an aggregate curve. An example is illustrated in the picture below, the blue curve is the aggregate curve, and I want to extract the red curve from the latter.
The idea is to use a neural network that takes the blue curve as input and generates the red curve as output. I am trying to perform some tests with feedforward neural networks (with Tensorflow library) but the results are very bad (the accuracy continues to decrease over the training). I suppose that the problem is the loss-function, I tried the cross-entropy with sigmoid (tf.nn.sigmoid_cross_entropy_with_logits()
) and the cross-entropy with softmax (tf.nn.softmax_cross_entropy_with_logits()
). Which loss-function would be more appropriate for this kind of problem?
Update
Network architecture:
- Input: a sequence of 48 float32 values (the blue curve).
- Output: a sequence of 48 float32 values (the red curve).
- Optimizer: Adam (tf.train.AdamOptimizer()).
- Batches of 100 samples.
- Layer 1: fully connected with 96 neurons.
- Layer 2: fully connected with 96 neurons.
- Layer 3: fully connected with 48 neurons.
I calculate accuracy as:
1 / (1 + abs(output - correct_output) / correct_output)
Generally I start with an accuracy of around 50%, and after 50'000 training steps it is around 48-47%.