python 怎么画损失函数和迭代次数的关系_如何迭代自定义损失函数中的张量?...

我使用的是tensorflow后端的keras。我的目标是在一个自定义损失函数中查询当前批次的batchsize。这是计算自定义损失函数的值所必需的,它取决于特定观测值的指数。我想让这一点更清楚,因为下面的例子最少可重复。在

(顺便说一句:在定义自定义丢失函数时,我当然可以使用为训练过程定义的批处理大小,并将其值插入其中,但是有一些原因可以使其发生变化,特别是如果epochsize % batchsize(epochsize modulo batchsize)不等于零,那么一个epoch的最后一批具有不同的大小。我在stackoverflow中没有找到合适的方法,尤其是。

Tensor indexing in custom loss function和Tensorflow custom loss function in Keras - loop over tensor和{a3}因为显然任何张量的形状都不能在构建图时被推断出来,这是一个损失函数的情况-形状推断只有在计算给定的数据时才可能,而这只有在给定的图中才可能。因此,我需要告诉自定义损失函数,在不知道维度长度的情况下,沿着某个维度对特定元素执行某些操作。在

(在所有示例中都是相同的)from keras.models import Sequential

from keras.layers import Dense, Activation

# Generate dummy data

import numpy as np

data = np.random.random((1000, 100))

labels = np.random.randint(2, size=(1000, 1))

model = Sequential()

model.add(Dense(32, activation='relu', input_dim=100))

model.add(Dense(1, activation='sigmoid'))

例1:没有问题就没有特别的东西,没有定制的损失

^{pr2}$

(输出省略,运行完美)

很简单,没有特别的损失def custom_loss(yTrue, yPred):

loss = np.abs(yTrue-yPred)

return loss

model.compile(optimizer='rmsprop',

loss=custom_loss,

metrics=['accuracy'])

# Train the model, iterating on the data in batches of 32 samples

model.fit(data, labels, epochs=10, batch_size=32)

(输出省略,运行完美)

例3:问题def custom_loss(yTrue, yPred):

print(yPred) # Output: Tensor("dense_2/Sigmoid:0", shape=(?, 1), dtype=float32)

n = yPred.shape[0]

for i in range(n): # TypeError: __index__ returned non-int (type NoneType)

loss = np.abs(yTrue[i]-yPred[int(i/2)])

return loss

model.compile(optimizer='rmsprop',

loss=custom_loss,

metrics=['accuracy'])

# Train the model, iterating on the data in batches of 32 samples

model.fit(data, labels, epochs=10, batch_size=32)

当然,张量还没有形状信息,这在建立图形时无法推断,只有在训练时。因此for i in range(n)会产生一个错误。有没有办法做到这一点?在

回溯:

-------在

顺便说一句,这是我真正的定制损失函数,以防有任何问题。为了简洁明了,我跳过了上面的内容。在def neg_log_likelihood(yTrue,yPred):

yStatus = yTrue[:,0]

yTime = yTrue[:,1]

n = yTrue.shape[0]

for i in range(n):

s1 = K.greater_equal(yTime, yTime[i])

s2 = K.exp(yPred[s1])

s3 = K.sum(s2)

logsum = K.log(y3)

loss = K.sum(yStatus[i] * yPred[i] - logsum)

return loss

这是cox比例harzards模型的部分负对数似然图。在

这是为了在评论中澄清一个问题,避免混淆。我不认为有必要详细了解这一点来回答这个问题。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值