我正在尝试建立一个基本的非线性回归模型,该模型将预测FTSE350中公司的回报指数。

我不确定我的偏见项在尺寸方面应该是什么样子,以及我是否在计算方法中正确使用了它:

w1 = tf.Variable(tf.truncated_normal([4, 10], mean=0.0, stddev=1.0, dtype=tf.float64))
b1 = tf.Variable(tf.constant(0.1, shape=[4,10], dtype = tf.float64))

w2 = tf.Variable(tf.truncated_normal([10, 1], mean=0.0, stddev=1.0, dtype=tf.float64))
b2 = tf.Variable(tf.constant(0.1, shape=[1], dtype = tf.float64))

def calculations(x, y):
    w1d = tf.matmul(x, w1)
    h1 = (tf.nn.sigmoid(tf.add(w1d, b1)))
    h1w2 = tf.matmul(h1, w2)
    activation = tf.add(tf.nn.sigmoid(tf.matmul(h1, w2)), b2)
    error = tf.reduce_sum(tf.pow(activation - y,2))/(len(x))

    return [ activation, error ]


我最初的想法是它应该与我的体重相同,但是我得到了这个错误:

ValueError: Dimensions must be equal, but are 251 and 4 for 'Add' (op: 'Add') with input shapes: [251,10], [4,10]


我玩过各种不同的想法,但似乎一事无成。

(我的输入数据具有4个功能)

我尝试过的网络结构在输入层中有4个神经元,在隐藏层中有10个神经元,后来在输出中有1个神经元,但是我觉得我也可以在权重层中混合尺寸吗?

最佳答案

当为前馈完全连接的神经网络构造层时(如您的示例),偏置的形状应等于相应层中节点的数量。因此,在您的情况下,由于权重矩阵的形状为(4, 10),因此该层中有10个节点,应使用:

b1 = tf.Variable(tf.constant(0.1, shape=[10], type = tf.float64))


原因是当您执行w1d = tf.matmul(x, w1)时,实际上得到的是形状为(batch_size, 10)的矩阵(如果batch_size是输入矩阵中的行数)。这是因为您要将(batch_size, 4)矩阵乘以(4, 10)权重矩阵。然后,在w1d的每一列上添加一个偏差,该偏差可以表示为10维向量,如果您将b1 [10]的形状设置为零。

此后没有非线性(S型),这称为仿射变换,您可以在此处了解更多信息:https://en.wikipedia.org/wiki/Affine_transformation

另一个很棒的资源是《斯坦福大学深度学习教程》,该教程很好地解释了这些前馈模型如何在这里工作:
http://ufldl.stanford.edu/tutorial/supervised/MultiLayerNeuralNetworks/

希望能有所帮助!

07-24 09:52
查看更多