Python 如何为keras提供恒定的输入

Python 如何为keras提供恒定的输入,python,machine-learning,neural-network,keras,classification,Python,Machine Learning,Neural Network,Keras,Classification,我的网络有两个时间序列输入。其中一个输入有一个固定的向量,在每个时间步重复。有没有一种优雅的方法可以将这个固定向量加载到模型中一次并用于计算?编辑:显然下面的答案不起作用(无论如何,现在)。有关相关答案,请参阅 查看(我在文档中找不到引用),看起来您可以使用Input并将常量Theano/TensorFlow tensor传递给它 from keras.layers import Input import tensorflow as tf fixed_input = Input(tensor

我的网络有两个时间序列输入。其中一个输入有一个固定的向量,在每个时间步重复。有没有一种优雅的方法可以将这个固定向量加载到模型中一次并用于计算?

编辑:显然下面的答案不起作用(无论如何,现在)。有关相关答案,请参阅


查看(我在文档中找不到引用),看起来您可以使用
Input
并将常量Theano/TensorFlow tensor传递给它

from keras.layers import Input
import tensorflow as tf

fixed_input = Input(tensor=tf.constant([1, 2, 3, 4]))

这将“包装”张量(实际上更像是用元数据“扩展”它),因此您可以将其用于任何Keras层。

您可以使用jdehesa描述的张量参数创建静态输入,但是张量应该是Keras(而不是tensorflow)变量。您可以按如下方式创建此文件:

from keras.layers import Input
from keras import backend as K

constants = [1,2,3]
k_constants = K.variable(constants)
fixed_input = Input(tensor=k_constants)
要补充的是: 在编译模型时,需要将常量输入作为输入,否则图形将断开连接

#您的输入
输入=输入(形状=(输入形状)
#一系列的
常量=[1]*输入形状
#将数组设为变量
k_常量=k.variable(常量,name=“one_variable”)
#使变量成为张量
一个张量=输入(张量=k_常数,name=“一个张量”)
#做几层
输入=(某些层())(输入)
#获得输出的互补性
输出=减法()
模型=模型([输入,张量],输出)
model.complie(一些参数)
当你训练时,你只需要输入你拥有的数据,你不再需要固定层了

我发现,无论您尝试什么,只要使用自定义层并利用numpy的强大功能通常都会更容易:

类补充(层):
定义初始(自我,**kwargs):
超级(互补,自我)。\uuuuu初始值(**kwargs)
def构建(自我,输入_形状):
超级(互补,自我)。构建(输入形状)#最后一定要调用此选项
def呼叫(自我,x):
返回1-x#此处使用MyArray+x

如果它总是相同的,为什么您需要输入它?或者你的意思是,对于给定的序列,它是固定的,但是对于不同的序列,它会有所不同?@sietschie是的,你说得对。不同的序列会有所不同。因此,我不想创建一个重复的向量,而是想知道是否有一种聪明的方法可以用这个输入初始化网络。你在想类似的事情吗?但是如果我使用RepeatVector,我仍然需要在每个历元中给出向量。我想知道在初始化网络本身时是否有一些方法可以完成。@dbc即使这篇文章比较老,而且有更高级别的答案(这不起作用),实际的解决方案还是在链接线程中。因此,即使另一个线程是重复的,它也包含解决方案。我不知道Stackoverflow是如何处理这种情况的。我如何使用这些常量制作和拟合模型?我是否也必须在合适的时间提供常数?这不起作用。但你在另一个线程中给出了一个可行的解决方案:我如何使用这些常量来制作和拟合模型?我是否也必须在合适的时间提供常数?有关实际解决方案,请参阅@azureai,它对我有效。文档中也对其进行了描述