数据:
具有形状= (T,M) #的宏观时间序列对所有企业都是相同的
形状= (T,N,K) #特定数据的微观时间序列
其中T是月份的时间维数,M是宏观特征的个数,N是企业的数目,K是P/E比等微观特征的个数。
任务:使用LSTM输出,重复N次并与微数据连接。
我希望对所有公司使用LSTM的输出,即所有t中t的所有(此处H=4)隐藏状态,从而设置return_sequences=True
,并重复它们N次,以便将它们与我的微数据连接起来,即用shape = (T, N, K+H)
获取新数据。
然后,这些新的数据将被重塑为(T*N, K+H)
,并被输入一个具有自定义损失函数的前馈神经网络,该函数适用于两个神经网络,通过构造只能在时间T上计算,从而具有批处理大小=1!
我尝试过以下方法,但由于dims的原因,它无法工作:
from keras.layers import concatenate, Input, LSTM, RepeatVector
from keras.utils.vis_utils import plot_model
from keras.models import Model
in_macro = Input(shape = (T, M), name = 'macro_input')
in_micro = Input(shape = (T, N, K), name = 'micro_input')
lstm = LSTM(4, return_sequences=True)(in_macro)
rep = RepeatVector(N)(lstm)
conc = concatenate([in_micro, rep])
model = Model(inputs=[in_micro,in_macro], outputs=conc)
plot_model(model, show_shapes=True)
ValueError: Input 0 is incompatible with layer repeat_vector_1: expected ndim=2, found ndim=3
是否有一种有效的方法来达到这一目标,甚至不需要重复?
发布于 2020-07-24 11:32:07
使用Lambda
层和堆栈找到解决方案:
from keras.layers import concatenate, Input, LSTM
from keras.utils.vis_utils import plot_model
from keras.models import Model
import keras.backend as k
in_macro = Input(shape=(T, M), name='macro_input')
in_micro = Input(shape=(T, N, K), name='micro_input')
lstm = LSTM(4, return_sequences=True)(in_macro)
stack = Lambda(lambda x: k.stack(N*[x], axis=2))(lstm)
conc = concatenate([in_micro, stack])
model = Model(inputs=[in_micro,in_macro], outputs=conc)
plot_model(model, show_shapes=True)
https://stackoverflow.com/questions/63069702
复制相似问题