如何将张量的一部分完全连接到Tens中的下一层

2024-10-01 22:38:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用可变自动编码器来生成音乐。为此,我使用了您可以看到的架构this sketch。我的(输入-&;输出-)数据是16首测量歌曲,每个测量由一个96x96 pianoroll表示(可以视为图像)。 首先,我想将每个度量值各自编码为大小为200的特征向量,然后将所有16个特征向量(串联)输入一个可变自动编码器。然后,在对整个过程进行反向采样之后

我的问题:如何有效地实现将每个度量值编码为tensorflow的第一步?我提出的最佳解决方案是构建一个包含16个占位符、16个第一隐藏层的图形,以此类推

以下是我到目前为止构建Architecture的代码:

n_inputs = 96*96
n_hidden1 = 200
n_hidden2 = 120
n_hidden3 = n_hidden1
n_outputs = n_inputs
learning_rate = 0.001

initializer = tf.contrib.layers.variance_scaling_initializer()
my_dense_layer = partial(
    tf.layers.dense,
    activation=tf.nn.elu,
    kernel_initializer=initializer)

#Input layer
X1 = tf.placeholder(tf.float32, [None, n_inputs], name='X1')
X2 = tf.placeholder(tf.float32, [None, n_inputs], name='X2')
X3 = tf.placeholder(tf.float32, [None, n_inputs], name='X3')
X4 = tf.placeholder(tf.float32, [None, n_inputs], name='X4')
X5 = tf.placeholder(tf.float32, [None, n_inputs], name='X5')
X6 = tf.placeholder(tf.float32, [None, n_inputs], name='X6')
X7 = tf.placeholder(tf.float32, [None, n_inputs], name='X7')
X8 = tf.placeholder(tf.float32, [None, n_inputs], name='X8')
X9 = tf.placeholder(tf.float32, [None, n_inputs], name='X9')
X10 = tf.placeholder(tf.float32, [None, n_inputs], name='X10')
X11 = tf.placeholder(tf.float32, [None, n_inputs], name='X11')
X12 = tf.placeholder(tf.float32, [None, n_inputs], name='X12')
X13 = tf.placeholder(tf.float32, [None, n_inputs], name='X13')
X14 = tf.placeholder(tf.float32, [None, n_inputs], name='X14')
X15 = tf.placeholder(tf.float32, [None, n_inputs], name='X15')
X16 = tf.placeholder(tf.float32, [None, n_inputs], name='X16')
X = tf.concat([X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16], 1, name='X')

#1st hidden layer (encoder1)
hidden1_1  = my_dense_layer(X1 , n_hidden1, name='hidden1_1')
hidden1_2  = my_dense_layer(X2 , n_hidden1, name='hidden1_2')
hidden1_3  = my_dense_layer(X3 , n_hidden1, name='hidden1_3')
hidden1_4  = my_dense_layer(X4 , n_hidden1, name='hidden1_4')
hidden1_5  = my_dense_layer(X5 , n_hidden1, name='hidden1_5')
hidden1_6  = my_dense_layer(X6 , n_hidden1, name='hidden1_6')
hidden1_7  = my_dense_layer(X7 , n_hidden1, name='hidden1_7')
hidden1_8  = my_dense_layer(X8 , n_hidden1, name='hidden1_8')
hidden1_9  = my_dense_layer(X9 , n_hidden1, name='hidden1_9')
hidden1_10 = my_dense_layer(X10, n_hidden1, name='hidden1_10')
hidden1_11 = my_dense_layer(X11, n_hidden1, name='hidden1_11')
hidden1_12 = my_dense_layer(X12, n_hidden1, name='hidden1_12')
hidden1_13 = my_dense_layer(X13, n_hidden1, name='hidden1_13')
hidden1_14 = my_dense_layer(X14, n_hidden1, name='hidden1_14')
hidden1_15 = my_dense_layer(X15, n_hidden1, name='hidden1_15')
hidden1_16 = my_dense_layer(X16, n_hidden1, name='hidden1_16')
hidden1 = tf.concat([hidden1_1, hidden1_2, hidden1_3, hidden1_4, hidden1_5, hidden1_6, hidden1_7, hidden1_8, hidden1_9, hidden1_10, hidden1_11, hidden1_12, hidden1_13, hidden1_14, hidden1_15, hidden1_16], 1, name='hidden1')

#codings distribution & sample (encoder2)
hidden2_mean = my_dense_layer(hidden1, n_hidden2, activation=None, name='hidden2_mean')
hidden2_gamma = my_dense_layer(hidden1, n_hidden2, activation=None, name='hidden2_gamma')
noise = tf.random_normal(tf.shape(hidden2_gamma), dtype=tf.float32, name='noise')
hidden2 = tf.add(hidden2_mean, tf.multiply(tf.exp(0.5 * hidden2_gamma), noise), name='hidden2')

#3rd hidden layer (decoder2)
hidden3_1  = my_dense_layer(hidden2, n_hidden3, name='hidden3_1')
hidden3_2  = my_dense_layer(hidden2, n_hidden3, name='hidden3_2')
hidden3_3  = my_dense_layer(hidden2, n_hidden3, name='hidden3_3')
hidden3_4  = my_dense_layer(hidden2, n_hidden3, name='hidden3_4')
hidden3_5  = my_dense_layer(hidden2, n_hidden3, name='hidden3_5')
hidden3_6  = my_dense_layer(hidden2, n_hidden3, name='hidden3_6')
hidden3_7  = my_dense_layer(hidden2, n_hidden3, name='hidden3_7')
hidden3_8  = my_dense_layer(hidden2, n_hidden3, name='hidden3_8')
hidden3_9  = my_dense_layer(hidden2, n_hidden3, name='hidden3_9')
hidden3_10 = my_dense_layer(hidden2, n_hidden3, name='hidden3_10')
hidden3_11 = my_dense_layer(hidden2, n_hidden3, name='hidden3_11')
hidden3_12 = my_dense_layer(hidden2, n_hidden3, name='hidden3_12')
hidden3_13 = my_dense_layer(hidden2, n_hidden3, name='hidden3_13')
hidden3_14 = my_dense_layer(hidden2, n_hidden3, name='hidden3_14')
hidden3_15 = my_dense_layer(hidden2, n_hidden3, name='hidden3_15')
hidden3_16 = my_dense_layer(hidden2, n_hidden3, name='hidden3_16')
hidden3 = tf.concat([hidden3_1, hidden3_2, hidden3_3, hidden3_4, hidden3_5, hidden3_6, hidden3_7, hidden3_8, hidden3_9, hidden3_10, hidden3_11, hidden3_12, hidden3_13, hidden3_14, hidden3_15, hidden3_16], 1, name='hidden3')

#logits (decoder1, output, but without activation func yet)
logits_1  = my_dense_layer(hidden3_1 , n_outputs, activation=None, name='logits_1')
logits_2  = my_dense_layer(hidden3_2 , n_outputs, activation=None, name='logits_2')
logits_3  = my_dense_layer(hidden3_3 , n_outputs, activation=None, name='logits_3')
logits_4  = my_dense_layer(hidden3_4 , n_outputs, activation=None, name='logits_4')
logits_5  = my_dense_layer(hidden3_5 , n_outputs, activation=None, name='logits_5')
logits_6  = my_dense_layer(hidden3_6 , n_outputs, activation=None, name='logits_6')
logits_7  = my_dense_layer(hidden3_7 , n_outputs, activation=None, name='logits_7')
logits_8  = my_dense_layer(hidden3_8 , n_outputs, activation=None, name='logits_8')
logits_9  = my_dense_layer(hidden3_9 , n_outputs, activation=None, name='logits_9')
logits_10 = my_dense_layer(hidden3_10, n_outputs, activation=None, name='logits_10')
logits_11 = my_dense_layer(hidden3_11, n_outputs, activation=None, name='logits_11')
logits_12 = my_dense_layer(hidden3_12, n_outputs, activation=None, name='logits_12')
logits_13 = my_dense_layer(hidden3_13, n_outputs, activation=None, name='logits_13')
logits_14 = my_dense_layer(hidden3_14, n_outputs, activation=None, name='logits_14')
logits_15 = my_dense_layer(hidden3_15, n_outputs, activation=None, name='logits_15')
logits_16 = my_dense_layer(hidden3_16, n_outputs, activation=None, name='logits_16')
logits = tf.concat([logits_1, logits_2, logits_3, logits_4, logits_5, logits_6, logits_7, logits_8, logits_9, logits_10, logits_11, logits_12, logits_13, logits_14, logits_15, logits_16], 1, name='logits')

outputs = tf.sigmoid(logits, name='outputs')

#loss function, training_op ...

Tags: namenonelayermytfoutputsactivationplaceholder

热门问题