Python Tensorflow:应为bool,得到类型为'的1;int';相反

Python Tensorflow:应为bool,得到类型为'的1;int';相反,python,numpy,tensorflow,Python,Numpy,Tensorflow,我的问题是,当我试图计算损失值时,我得到了以下错误: 应为bool,但得到了类型为“int”的1 我的目标是尝试识别图像中的角色,但并非所有图像都有角色。因此,每个图像的标签由一个表示字符存在与否的值(0或1)和一个表示相应字符的热向量(a->Z->0->9)组成。例如,我有一个包含“B”字符的图像,标签如下: 1 0100000000000000000000000000000 如果图像根本不包含任何字符,则一个热字符是随机的,例如: 000000000000000000000000000000

我的问题是,当我试图计算损失值时,我得到了以下错误:

应为bool,但得到了类型为“int”的1

我的目标是尝试识别图像中的角色,但并非所有图像都有角色。因此,每个图像的标签由一个表示字符存在与否的值(0或1)和一个表示相应字符的热向量(a->Z->0->9)组成。例如,我有一个包含“B”字符的图像,标签如下:

1 0100000000000000000000000000000

如果图像根本不包含任何字符,则一个热字符是随机的,例如:

0000000000000000000000000000000000000000000

为了计算损失,我使用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\u part\u 2=logits\u value[is\u char,1::]->应为bool,取而代之的是类型为“int”的1


在numpy中,我认为这是可行的,但不幸的是,没有使用张量。有人知道我该怎么解决吗

您的所有参数都表示什么是期望值/类型?@salvadodali'logits_value'是CNN的出口,没有应用激活函数(带形状[50,37]的张量),'tf_train_labels'是每个标签的基本事实(形状[50,37])。“is_char”是一个大小为50的向量,表示训练批的每一行的真(有一个字符)或假(随机图像)。“logits_parts_2”的预期值/类型是一个具有形状的张量[其中,_是_true_,在_向量中,_'is_char',36],dtype=float。