tensorflow - 在自定义 tensorflow keras 指标中获取批量大小
问题描述
我想制作一个自定义指标,如https://www.tensorflow.org/guide/keras/train_and_evaluate#specifying_a_loss_metrics_and_an_optimizer
我的代码看起来像这样
class IOU(tf.keras.metrics.Metric):
def __init__(self, name='iou_part', **kwargs):
super(IOU, self).__init__(name=name, **kwargs)
self.iou = self.add_weight(name='iou_part', initializer='zeros')
self.template_width = 115
self.template_height = 75
self.frame_width = 1280
self.frame_height = 720
self.corners = tf.constant([[-0.5, 0.1], [-0.5, 0.5], [0.5, 0.5], [0.5, 0.1]], dtype=tf.float32)
self.epsilon = 1e-6
def update_state(self, y_true, y_pred, sample_weight=None):
batch_size = y_true.shape[0]
fake_frame = tf.ones((batch_size, 1, self.frame_height, self.frame_width))
fake_template = tf.ones((batch_size, 1, self.template_height, self.template_width))
target = get_perspective_transform(self.corners, tf.reshape(y_true, (-1, 2, 4)))
output = get_perspective_transform(self.corners, tf.reshape(y_pred, (-1, 2, 4)))
## Compute IOU
但是,这会给出错误“TypeError:Expected int32, got None of type 'NoneType' 相反。” 这是因为执行 model.compile(....) 时 y_true 为 (None, 4, 2) 。将批量大小纳入指标的正确方法是什么?
解决方案
推荐阅读
- vega-lite - 我们如何在 react vega 中实际注册自定义格式化程序?
- docker - 使用 Docker Kubernetes 集群获取 URL 并在没有 Minikube Cluster 的情况下访问正在运行的服务
- java - 布尔值的 Android MutableLiveData 初始化
- java - 带图片的 ViewPager 指示器
- node.js - 当我尝试从“sequelize-typescript”导入 Sequelize 时出现 TypeError
- node.js - 当错误与,req,res和next一起传递时,Express js中间件不起作用
- python - 在单独的图形上绘制 matplotlib 直方图图例
- shadow-dom - shadow dom 内文档变量的值
- python - 如何使用类似 pandas 的界面执行数据库内分析?
- delphi - Rtti:在类中调用方法时获取“无效的类类型转换”