【问题标题】:Regularization Term in Loss Function doing mathematical operations and assigning values损失函数中的正则化项进行数学运算和赋值
【发布时间】:2021-05-03 20:31:22
【问题描述】:

我认为我仍在努力理解 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 条件。这怎么可能?

非常感谢!!

【问题讨论】:

    标签: python tensorflow keras neural-network loss-function


    【解决方案1】:

    您可以简单地使用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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      • 2018-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多