Heads up: I'm not sure if this is the best place to post this question, so let me know if there is somewhere better suited.
I am trying to train a simple neural network to learn a simple quadratic function of the form: $f(x) = 5 - 3x + 2x^2$
I set up a single-layered network with a single neuron. The input is a 2d array of the form $(x, x^2)$ and I don't use an activation function. I expect that the weights and biases I extract from the network will correspond to the coefficients in the function $f(x)$.
I randomly generate some training points and labels, as well as a validation data set, and train my model using the Keras sequential model called from TensorFlow.
import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt
def fTest(x_arg):
return 5 - 3*x_arg + 2*(x_arg)**2
# training data
t = np.random.choice(np.arange(-10,10, .01),5000 )
t1 = []
for i in range(len(t)):
t1.append([t[i], t[i]**2])
s = []
for i in range(len(t)):
s.append(fTest(t[i]))
t1 = np.array(t1)
s = np.array(s)
# validation set
v = np.random.choice(np.arange(-10,10, .01),5000 )
v1 = []
for i in range(len(v)):
v1.append([v[i], v[i]**2])
u = []
for i in range(len(v)):
u.append(fTest(v[i]))
v1 = np.array(v1)
u = np.array(u)
model = keras.Sequential([
keras.layers.Dense(1, input_shape=(2,) , use_bias=True),
])
model.compile(optimizer='adam',
loss='mean_squared_logarithmic_error',
metrics=['mae','accuracy'])
model.fit(t1, s, batch_size=50, epochs=2000, validation_data=(v1,u))
The model seems to train, but very poorly. The 'accuracy' metric is also zero, which I am very confused about.
Epoch 2000/2000
200/200 [==============================] - 0s 23us/step - loss: 0.0018 - mean_absolute_error: 1.0144 - acc: 0.0000e+00 - val_loss: 0.0014 - val_mean_absolute_error: 1.0276 - val_acc: 0.0000e+00
Visually, the predictions of the model seem to be reasonably accurate
I've tried other loss-functions but none of them seem to work any better. I'm fairly new to to using TF/Keras so is there something obvious that I'm missing?
Edit: corrected training output