【问题标题】:How do I deal with a function of a neural network?如何处理神经网络的函数?
【发布时间】:2023-03-16 03:44:01
【问题描述】:

我是深度学习的新手,我使用带有 tensorflow 后端的 keras。

无论如何,我有一个带有 N 个输入和输出(x_i, y_i)的训练集。我的模型首先构建了一个神经网络,比如说F,然后使用函数g得到y。换句话说,y=g(F(x)) 其中F 是一个神经网络,g 是一个函数,可能不可逆。

有没有办法使用 keras 构建这样的模型?为简化起见,令 y=3xF(x)+x。我想训练这样的模型而不改变像 (y_i-x_i)/(3x_i) 这样的训练输出。

【问题讨论】:

    标签: python keras neural-network deep-learning


    【解决方案1】:

    是的,您可以使用 Keras 函数式 API 来定义您的模型,并使用 Keras 后端调用函数来乘以张量。确保 x 和 F(x) 具有相同的形状,以便您可以将它们相乘。您可以定义 Lambda 层以确保您的输出是 Keras 层。

    例如,假设我们的函数 F(x) = Sin((x-1)^2);我们要计算 x*F(x)+x

    定义:

    from keras.layers import Input,Lambda
    from keras.models import Model
    import keras.backend as K
    
    def custom_function(x):
        return K.sin((x-1)*(x-1))+x
    
    
    
    def create_model(shape=(10,10,10)):
        x=Input(shape)
        logits=Lambda(custom_function)(x)
        logits= keras.layers.multiply([x,logits])
        logits = keras.layers.add([logits,x])
        model = Model(inputs=x, outputs=logits)
        return model
    

    您需要做的就是确保形状一致,以便我们可以将它们相加和相乘。

    有关功能性 API 的更多信息,请查看:https://keras.io/models/model/

    【讨论】:

    • 是否可以使用自定义函数g代替加法和乘法?
    • 是的,您只需要能够使用 keras 后端或 tensorflow ops 定义函数 G
    • 哦,我明白了。谢谢!
    • 我认为不支持 3*x*logits+x 因为结果不是层。相反,我们应该使用 keras.layers.Add() keras.layers.Multiply() 请检查一下。
    • 不需要是层;在功能 API 中,您只需使用 TF ops 操作张量。正如我指出的那样,问题可能是形状无法解决。除非它们的形状相同,否则不能将 x 与 f(x) 相乘
    猜你喜欢
    • 2013-04-16
    • 2016-07-11
    • 2018-10-10
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    相关资源
    最近更新 更多