我想使用张量流来创建A GAN,其中鉴别器是卷积神经网络,而生成器是lstm。我正在使用的数据大约有19,000个时间步长。我想让生成器生成19,000个长序列而不创建19,000个层。
我尝试使用一个LSTM单元来执行此操作,然后调用该单元19,000次:
def generator(z, num_neurons, reuse = None):
with tf.variable_scope('gen',reuse=reuse):
cell = tf.contrib.rnn.OutputProjectionWrapper(
tf.contrib.rnn.BasicLSTMCell(num_units=num_neurons,
activation=tf.nn.relu6),
output_size=num_notes)
outputs, states = tf.nn.dynamic_rnn(cell, z[:,:,0:],
dtype=tf.float32)
lastoutput = outputs[:,:,-1]
reshapedlastout = tf.reshape(lastoutput,[-1, num_notes,1])
reshapedlastout = reshapedlastout/6
z = tf.concat([z,reshapedlastout],2)
for i in range(length-1):
outputs, states = tf.nn.dynamic_rnn(cell, z[:,:,-noisesize:], dtype=tf.float32)
lastoutput = outputs[:,:,-1]
reshapedlastout = tf.reshape(lastoutput,[-1,num_notes , 1])
reshapedlastout = reshapedlastout/6
z = tf.concat([z,reshapedlastout],2)
z = z[:,:,-length:]
return tf.reshape(z,[-1,num_notes,length, 1])
其中长度= 19000
我不确定这是否会创建19000个不同的权重集(或类似的权重集),我认为这几乎是不可能的。其次,我不确定是否需要/如何将状态从一次使用单元传递到下一次。据我了解,状态是使RNN适于序列预测的原因,因为每个结果都是前一个的函数。但是,我对LSTM并不是很熟悉,所以我不知道是否必须以某种方式或通过重用状态自动传递的同一单元格在我的代码中实现。我问这些问题的原因是因为我的计算机在尝试调用此函数并创建生成器时花费了大量时间。但是,我的计算机通常非常慢,所以可能就是这样。