我正在编写一个LSTM生成对抗网络,其中生成器采用长度为3的序列(Cust_ID Jan_Emp_ID Feb_Emp_ID Mar_Emp_ID Apr_Emp_ID NonNulls
4 NULL NULL 9 9 2
),并预测序列中的下一个元素,并使用序列中的最后3个元素作为新的输入,并重复直到我们得到长度为20的序列。
但是看来Lambda层的配置不正确..?
starting_seqs
编辑:我尝试了@today的建议,并将for循环更改为此,同时仍然得到相同的错误/堆栈跟踪:
def build_generator():
generator = Sequential()
generator.add(LSTM(20, return_sequences=True, input_shape=(3, 6))) # (len_timestep, n_feature)
generator.add(LSTM(20, return_sequences=True))
generator.add(LSTM(6, activation='softmax'))
starting_seqs = Input(shape=(3, 6))
input_seqs = starting_seqs
gen_seqs = tf.reshape(starting_seqs, shape=[1, 3, 6])
for i in range(17):
input_seqs = tf.reshape(input_seqs, shape=[1, 3, 6])
gen_nexts = tf.one_hot(tf.nn.top_k(generator(input_seqs)).indices, 6)
gen_seqs = Concatenate(axis=1)([gen_seqs, gen_nexts])
input_seqs = Lambda(lambda x: x[:,-3:,])(gen_seqs)
return Model(starting_seqs, gen_seqs)
堆栈跟踪:
for i in range(17):
gen_nexts_idx = Lambda(lambda x: generator(tf.reshape(x, shape=[1, 3, 6])))(input_seqs)
gen_nexts = Lambda(lambda x: tf.one_hot(tf.nn.top_k(x).indices, 6))(gen_nexts_idx)
gen_seqs = Concatenate(axis=1)([gen_seqs, gen_nexts])
input_seqs = Lambda(lambda x: x[:,-3:,])(gen_seqs)