Python 对tf/keras网络功能的质疑
我正在研究分位数回归,我有一些问题要理解下面的网络是如何工作的:Python 对tf/keras网络功能的质疑,python,tensorflow,keras,regression,data-science,Python,Tensorflow,Keras,Regression,Data Science,我正在研究分位数回归,我有一些问题要理解下面的网络是如何工作的: z = tf.keras.layers.Input((len(features),), name="Patient") x = tf.keras.layers.Dense(100, activation="relu", name="d1")(z) x = tf.keras.layers.Dense(100, activation="rel
z = tf.keras.layers.Input((len(features),), name="Patient")
x = tf.keras.layers.Dense(100, activation="relu", name="d1")(z)
x = tf.keras.layers.Dense(100, activation="relu", name="d2")(x)
p1 = tf.keras.layers.Dense(3, activation="relu", name="p1")(x)
p2 = tf.keras.layers.Dense(3, activation="relu", name="p2")(x)
preds = tf.keras.layers.Lambda(lambda x: x[0] + tf.cumsum(x[1], axis=1),
name="preds")([p1, p2])
model = tf.keras.Model(z, preds)
特别是,当使用Lambda时,我不理解最后一层“preds”:我知道Lambda函数在python中如何工作,但我不理解Lambda层如何结合输入张量。我希望有人能帮助我理解这一点。
在Kaggle竞赛“osic肺纤维化进展”中,网络被大量用于笔记本电脑
行中:
preds = tf.keras.layers.Lambda(lambda x: x[0] + tf.cumsum(x[1], axis=1),
name="preds")([p1, p2])
Lambda层的输入是[p1,p2]
。所以x=[p1,p2]
。因此
x[0]=p1
,x[1]=p2
因此,它执行的操作是x[0]+tf.cumsum(x[1],轴=1)
,即p1+tf.cumsum(p2,轴=1)
。你可以
关于tf.cumsum()
函数,请参阅
希望这能消除你的疑虑。如果您还有其他问题,请随时发表评论。您能澄清您的问题吗?理解Python中的lambda函数有困难吗?或者你有没有关于Keras的问题?你得到了意想不到的结果吗?您提供的示例的上下文是什么?你是从什么地方抄来的吗?@tomanizer我刚刚修改了帖子:)。主要的问题是我不明白输入张量是如何组合的谢谢!在你们的回答之后我还有一个问题:因为输入张量形状是(批量大小,p1/p2的尺寸),所以求和中的轴是1?如果是这样,该层的结果就是p1+p2的累积和?为什么很多人使用这个解决方案而不直接预测回归的结果?p1、p2和pred的形状都是(批次大小,3)(3,因为密集层)。是的,该层的结果只是p1+p2的累积和的总和,但要将其用作keras模型,需要将其添加到lambda层中。可能是模型需要使用cumsum()。与使用Conv2D的图像一样,对于文本,您使用LSTM、GRU等。因此,对于使用回归/稠密直接预测,您需要两个额外的稠密层,因此在不知道使用模型的原因的情况下简化了任务,无法解释为什么在那里使用模型