首页 > 编程知识 正文

tensorflow常用api,tensorflow安装whl

时间:2023-05-06 00:18:11 阅读:13243 作者:2345

tensor flow 2.0——固态硬盘网络原理与代码分析(五)——在计算损耗函数之前,我写了三个关于固态硬盘代码的讲座。 还有最后一个关键代码——损失函数的计算。 不说废话。 就这样拿出去晒干~

model.com pile (optimizer=Adam (lr=learning _ rate _ base ),loss=multiboxloss ) num_classes,neg _ pos _ rarase

损耗函数包装在MultiboxLoss类中,最后一个compute_loss方法用于调用计算。

首先,弄清楚y_true、y_pred分别是什么形状。 其实两者的shape都是(28732,33 )。 2表示batch_size,8732表示每个图像的锚箱,并且33表示对每个训练图像编码的结果。

#分类后的loss # batch_size、8732、21----batch_size、8732------------------------------------------ - 4:-8] )、y_pred[:4:-8] )首先,实际上根据实际框对锚定框进行了编码,然后对所有实际框和预测框分类进行loss 这里使用的是softmax。

def_softmax_loss(self,y_true,y_pred ) :y_pred=TF.maximum ) y_pred,1e-7 ) soft max _ loss=

然后,计算所有实框(实际上是锚定框根据实框编码后)和预测框坐标的loss。 这里使用l1平滑损耗函数。

什么是L_1损失函数?

3359 blog.csdn.net/weixin _ 41940752/article/details/93159710

代码实现:

def_L1_smooth_loss(self,y_true, y _ pred (: ABS _ loss=TF.ABS (y _ true-y _ pred ) y_1=|y_t-y_p|sq_loss=0.5* ) y_truss

接下来,计算所有正样本预箱的loss。

#获取所有加号loss---------------pos _ loc _ loss axis=1) pos _ conf _ loss=TF.reduce

现在损失一个。 是负样本的conf的loss。

----------------##1每张正样本的数量(# batch_size,--------------------- num _ pos=TF.redu ru )

# batch_size, # --------------------------------------------- # num_neg = tf.minimum(self.neg_pos_ratio * num_pos, num_boxes - num_pos) # 找到了哪些值是大于0的 pos_num_neg_mask = tf.greater(num_neg, 0) # --------------------------------------------- # # 如果有些图,它的正样本数量为0, # 默认负样本为100 # --------------------------------------------- # has_min = tf.cast(tf.reduce_any(pos_num_neg_mask),tf.float32) num_neg = tf.concat(axis=0, values=[num_neg, [(1 - has_min) * self.negatives_for_hard]])

以上这么一大堆代码,其实任务很简单,就是在找负样本,如果有正样本,那么就取3倍的负样本。如果没有正样本,那么就筛选出100个负样本。

# --------------------------------------------- # num_neg_batch = tf.reduce_sum(tf.boolean_mask(num_neg, tf.greater(num_neg, 0))) num_neg_batch = tf.cast(num_neg_batch,tf.int32) #一个批次中所有的负样本的个数 # --------------------------------------------- # # 对预测结果进行判断,如果该先验框没有包含物体 # 那么它的不属于背景的预测概率过大的话 # 就是难分类样本 # --------------------------------------------- # confs_start = 4 + self.background_label_id + 1 confs_end = confs_start + self.num_classes - 1 # --------------------------------------------- # # batch_size,8732 # 把不是背景的概率求和,求和后的概率越大 # 代表越难分类。 # --------------------------------------------- # max_confs = tf.reduce_sum(y_pred[:, :, confs_start:confs_end], axis=2) # --------------------------------------------------- # # 只有没有包含物体的先验框才得到保留 # 我们在整个batch里面选取最难分类的num_neg_batch个 # 先验框作为负样本。 # --------------------------------------------------- # max_confs = tf.reshape(max_confs * (1 - y_true[:, :, -8]), [-1]) _, indices = tf.nn.top_k(max_confs, k=num_neg_batch) neg_conf_loss = tf.gather(tf.reshape(conf_loss, [-1]), indices)

这一步比较难理解,我个人理解为:先找到每个批次中所有负样本的数量,然后计算所有预测框的不是背景的概率进行求和,求和后的概率越大,代表越难分类。(我认为可以这么理解:除了背景的概率,其他概率相加越大,说明这个预测框就是属于那种越难分类的,比如说一只狗,预测出它为猫为0.3,狗为0.4,老虎为0.35,像这种的就很难区别出到底是哪个动物。)然后,我们在整个batch里面选取最难分类的num_neg_batch个先验框作为负样本。

最后,将三个损失进行相加,并归一化。

# 进行归一化 num_pos = tf.where(tf.not_equal(num_pos, 0), num_pos, tf.ones_like(num_pos)) total_loss = tf.reduce_sum(pos_conf_loss) + tf.reduce_sum(neg_conf_loss) + tf.reduce_sum(self.alpha * pos_loc_loss) total_loss /= tf.reduce_sum(num_pos) return total_loss

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。