python - 损失函数中的正则化项进行数学运算和赋值
问题描述
我想我仍然在努力理解 Tensorflows 框架以及如何以与普通数组和 numpy 一样的方式操作它。
对于损失,我有预测和真实值:y_pred 和 y_true,我想迭代 y_pred 值并为其分配值 1 或 0,根据一些更小、< 或更大、> 条件的损失函数.
Batch 大小为 1000,因此输入形状为 (1000,16,16,1)。我认为代码将阐明我想要做什么,我试图尽可能地简化它。
def regularization_term(y_true, y_pred):
test = y_pred
for i in tf.range(len(y_pred)):
for y in tf.range(len(y_pred[i])):
for x in tf.range(len(y_pred[i][y])):
if(random.random()>y_pred[i][y][x][0]):
test[i][y][x][0] = 0
else:
test[i][y][x][0] = 1
return test * y_true
所以我需要一种方法来为张量“测试”分配一个值,以及一种从 y_pred 中询问这个更大/更小的 if 条件的方法。这怎么可能?
非常感谢你!!
解决方案
你可以简单地使用tf.keras.backend.switch
根据您的报告,您的regularization
功能是:
def regularization(y_true, y_pred):
zeros = tf.zeros_like(y_pred)
random = tf.random.uniform(tf.shape(y_pred), minval=0, maxval=1)
reg = tf.keras.backend.switch(random > y_pred, zeros, y_true)
return reg
简单测试:
y_true = tf.random.uniform(shape=(100,16,16,1), minval=0, maxval=1)
y_pred = tf.random.uniform(shape=(100,16,16,1), minval=0, maxval=1)
regularization(y_true, y_pred)
推荐阅读
- unity3d - 力如何作用于多个物体?
- python - 在创建 Python 类时,如何在 Rust 中使用 pyo3 创建析构函数方法?
- html - 汉堡菜单不会正确的位置
- julia - 如何从 Julia 中的拟合 GLM 模型对象中提取数据分布类型(例如泊松、二项式)?
- c++ - 有没有办法在 Visual Studio Code 中修改 Google C/C++ 格式化程序?
- android - ionic 5 cordova fcm 带火力底座
- python - 如何删除 discord.py 中的消息
- python - 将 csv 文件的行转换为对象
- java - 按 Switch 不设置主题。应用程序不会崩溃
- c++ - 在 linux 机器上构建运行时的编译标志