我正在尝试在张量流中半手动地构建MLP。我这样做并对其进行了训练,但是无论学习率如何,我的均方误差都很高。我认为我的模型构建不正确。我想我可以通过查看诸如keras之类的高级API的源代码来找到答案,但是我不知道如何理解源代码,所以我希望有人对此发表意见。
输入数据为:
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')
这里有什么突出的问题吗?
编辑:我对隐藏层中神经元数量的选择是任意的。我还不知道如何选择这个数字。