Многослойный персептрон кажется неправильно сконструированным - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь построить MLP полу-вручную в тензорном потоке.Я сделал это и обучил его, но моя среднеквадратическая ошибка очень высока независимо от скорости обучения.Я думаю, что моя модель построена неправильно.Я думаю, что мог бы найти свой ответ, посмотрев на исходный код высокоуровневых API, таких как keras, но я не знаю, как понимать исходный код, поэтому мне хотелось бы, чтобы кто-то высказал свое мнение по этому поводу.

Входные данныеданные:

data = np.random.rand(1000, 5)
m, n = data.shape
data_biased = np.c_[np.ones((m, 1)), data]

Функция, которую я пытаюсь выучить, проста:

# Some numpy algebra with gaussian noise on top
target = (3 * data[:, 0] * data[:, 3] + data[:, 1] - 3 * np.square(data[:, 2]) + 4 * data[:, 4]).reshape(m, 1) + np.random.normal(10, 1, size=(m, 1))

И сеть, которая у меня сейчас есть:

k = 2 * n + 1
# Putting the data and targets into tensors
Data = tf.constant(value=data, dtype=tf.float32, name='Data')
Target = tf.constant(value=target, dtype=tf.float32, name='Target')
Input = tf.placeholder(dtype=tf.float32, shape=(m, n + 1), name='Input')

# My prameters. Only one hidden layer with k neurons.
Theta1 = tf.get_variable(name='Theta1', initializer=tf.constant(value=np.random.rand(n + 1, k - 1) * 2 - 1, dtype=tf.float32))
Theta2 = tf.get_variable(name='Theta2', initializer=tf.constant(value=np.random.rand(k, 1) * 2 - 1, dtype=tf.float32))

# Computing the layer activations
Hidden = tf.concat(values=[np.ones((m, 1)), tf.sigmoid(x=tf.matmul(a=Input, b=Theta1))], axis=1, name='Hidden')
Output = tf.sigmoid(x=tf.matmul(a=Hidden, b=Theta2), name='Output')

Делает что-нибудьВыдвигается ли здесь проблема?

Редактировать: Мой выбор количества нейронов в скрытом слое был произвольным.Я пока не понимаю, как это число выбрано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...