我正在通过here工作。我目前正在修改损失。看着,

    deltas=tf.square(y_est-y)
    loss=tf.reduce_sum(deltas)


我理解这是在计算输出和真实标签之间的平方差。那么损失就是这些平方的总和。因此,对于样本S_i将平方的单个样本误差写为i,对于批次损失仅为\sum_{i} f(S_i)的情况来说,事情很简单,
总和遍历所有样本。但是,如果您不能以这种形式写损失怎么办?也就是说,对于某些常规f({S_i}),整个数据的批次损失为f,而i遍及所有样本。也就是说,不能将整个数据的损失计算为组成样本损失的一些简单线性组合。你如何在tensorflow中编写代码?谢谢。

以下是有关f的更多详细信息。神经网络的输出是u_i,其中i从1到n。 n是我们拥有的样本数。我的错误是这样的

sum_{i from 1 to n} C_i log{sum_{k from 1 to n} I_{ik} exp{-d(u_i,u_k)} }


C_i是已连接到节点i的节点数,它是一个常数。如果未连接节点I_{ik}和节点i,则k为1。

感谢您的代码。也许我的问题措词不正确。我不是真的在寻找损失的代码。我可以自己做。如果你看

deltas=tf.square(y_est-y)
loss=tf.reduce_sum(deltas)


三角洲,是(1,3)吗?略高于它的读数

# Placeholders for input and output data
X = tf.placeholder(shape=(120, 4), dtype=tf.float64, name='X')
y = tf.placeholder(shape=(120, 3), dtype=tf.float64, name='y')

# Variables for two group of weights between the three layers of the network
W1 = tf.Variable(np.random.rand(4, hidden_nodes), dtype=tf.float64)
W2 = tf.Variable(np.random.rand(hidden_nodes, 3), dtype=tf.float64)

# Create the neural net graph
A1 = tf.sigmoid(tf.matmul(X, W1))
y_est = tf.sigmoid(tf.matmul(A1, W2))


我认为是(1,3)。他们使用(1,3)y_esty。我想知道对于任何给定的m使用(m,3)y_esty的特定张量流语法。

最佳答案

我可能在语法上是错误的……但是这应该给您一个大致的概念。另外,您可以通过向量化进一步优化它。我只是将损失函数保持原样。
N是批次大小。

def f(C, I, U, N):
    loss = 0
    for i in range(N):
         sum_ = 0
         for k in range(N):
              sum_ += I[i,k] * tf.exp(d(u[i]-u[k])
         loss += C[i]*tf.log(sum)
    return loss
loss = f(C,I,U, batch_size)

10-05 18:07
查看更多