我正在通过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_est
和y
。我想知道对于任何给定的m使用(m,3)y_est
和y
的特定张量流语法。 最佳答案
我可能在语法上是错误的……但是这应该给您一个大致的概念。另外,您可以通过向量化进一步优化它。我只是将损失函数保持原样。
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)