我的问题是当我尝试计算损失值时出现以下错误:
预期的布尔,得到1' int'代替。
我的目标是尝试识别图像中的角色,但并非所有图像都有角色。因此,每个图像的标签由值(0或1)组成,该值指示字符的存在与否,然后是指示相应字符的单热矢量(A-> Z-> 0-> 9 )。例如,我有一张包含' B'标签的字符是这样的:
1 0100000000000000000000000000000000000
如果图像根本不包含任何字符,则单热字符是随机的,例如:
0 0000000000000000010000000000000000000
要计算损失,我使用sigmoid作为标签的第一个值,使用softmax作为字符部分。但是在没有角色的图像中我想要"忽略" softmax部分。我试着这样做:
def loss_total(logits_value):
is_char = tf_train_labels[:, 0] > 0.5
logits_part_1 = logits_value[:, 0]
logits_part_2 = logits_value[is_char, 1:]
loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=logits_part_1, labels=tf_train_labels[:,0]))
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=logits_part_2, labels=tf_train_labels[is_char,1:])) + loss
...
我随机批量创建了50张图片并试图训练CNN。该函数的第一行是计算50个图像中的哪个是字符。然后我试着划分标签。 我拍摄了所有50张图像来计算sigmoid损失并尝试拍摄所有字符图像以计算softmax损失但是当我这样做时会出现所描述的错误。
logits_part_2 = logits_value [is_char,1:] - >预期的布尔,得到了1' int'代替。
在numpy中,我认为这会奏效,但遗憾的是不能使用Tensors。有人知道如何解决这个问题吗?