【问题标题】:Get training data shape inside keras custom loss function在 keras 自定义损失函数中获取训练数据形状
【发布时间】:2020-05-14 13:59:16
【问题描述】:

我已经编写了下面的自定义损失函数,我需要通过将输入形状除以输出形状来创建一个因子。

def distance_loss(x,y):
    x_shape = K.int_shape(x)[1]
    y_shape = K.int_shape(y)[1]
    print(x_shape,y_shape)
    factor = x_shape/y_shape
    loss = tf.sqrt(factor) * tf.norm(x-y)
    return tf.math.abs(loss)

这是模型架构是:

model = Sequential()
model.add(Dense(32,input_dim=4))
model.add(Dense(64,activation='relu'))
model.add(Dense(128,activation='relu'))
model.add(Dense(64,activation='relu'))
model.add(Dense(2,activation='relu'))
opt = Adam(lr = 0.001)
model.compile(optimizer = opt, loss=distance_loss,metrics=['accuracy'])

当我运行model.compile 行时。自定义损失打印

无 2

并抛出错误

TypeError: /: 'NoneType' 和 'int' 的操作数类型不受支持

我读到训练数据的输入形状只有在训练阶段才知道。有没有办法绕过这个问题?

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

    改用K.shape

    def distance_loss(x,y):
        x_shape = K.shape(x)[1]
        y_shape = K.shape(y)[1]
        factor = K.cast(x_shape, x.dtype) / K.cast(y_shape, y.dtype)
        loss = tf.sqrt(factor) * tf.norm(x-y)
        return tf.math.abs(loss)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-05
      • 2020-07-09
      • 2021-10-25
      • 2020-12-19
      • 2017-12-18
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多