我的输入数据如下所示:
> x <- rnorm(10*9, sd = 10) %>% matrix(10) %>% round
> colnames(x) <- c(paste0(2014, c("a","b", "c")), paste0(2015, c("a","b", "c")), paste0(2016, c("a","b", "c")))
> x
2014a 2014b 2014c 2015a 2015b 2015c 2016a 2016b 2016c
[1,] 1 -11 3 3 6 5 17 5 15
[2,] 9 8 0 -1 10 8 -3 -11 6
[3,] -6 22 -3 1 -1 -4 -3 11 -9
[4,] 10 -15 0 -2 4 14 11 -11 3
[5,] 5 4 5 5 15 -9 2 5 1
[6,] -24 16 9 -7 2 -12 1 18 -2
[7,] 1 13 5 -14 1 -10 15 -1 14
[8,] -8 4 4 -15 -1 -20 -6 14 5
[9,] 10 19 -15 15 -4 3 -1 -11 8
[10,] 10 -11 -9 -1 16 3 24 -8 4
我的结果变量是连续的(即:这是一个回归问题)。
我想要使用如下所示的架构来拟合模型:
基本上,我从不同年份获得的粒度数据汇总形成一组年度现象,这些现象本身可以相互作用。如果我有足够的数据,我可以装入一堆完全连接的层。但是对于我适度的样本量,这些效率会很低。
这不完全是转换网,因为我不希望“磁贴”重叠。
我也想要同时应用辍学和全球二级惩罚。
我是Keras的新手,但不是神经网络。我如何实现这一点,以及如何在Keras术语中引用它?
答案 0 :(得分:1)
您可以使用functional API拥有多个输入并创建该计算图。有点像:
inputs = [Input(shape=(3,)) for _ in range(3)]
latents = list()
for i in range(3):
latent = Dense(3, activation='relu')(inputs[i])
latent = Dense(3, activation='relu')(latent)
latents.append(latent)
merged = concatenate(latents)
out = Dense(4, activation='relu')(merged)
out = Dense(4, activation='relu')(out)
out = Dense(1)(out)
您的体系结构图假设您有固定的年份输入,在这种情况下为3年。如果您有多年的可变年份,则必须使用共享Dense图层并使用TimeDistributed包装器在合并之前将Dense图层应用于每年:
in = Inputs(shape=(3,3)) # this time we have 2d array of 3 years
latent = TimeDistributed(Dense(3, activation='relu'))(in) # apply same dense to every year
latent = TimeDistributed(Dense(3, activation='relu'))(latent)
merged = Flatten()(latent)
out = ...
这次Dense图层在多年内共享,它们本质上具有相同的权重。