tensorflow autoencoder不是在训练中学习

时间:2017-06-27 02:36:55

标签: tensorflow autoencoder

我正在尝试使用与给定原始数据非常接近的tensorflow自动编码器生成合成数据。但是,自动编码器不是在训练阶段学习。我的成本函数一般没有下降,合成数据与原始数据无关。我的代码如下:

x = tf.placeholder("float", [None, COLUMN])
# Weights and biases to hidden layer
Wh = tf.Variable(tf.random_uniform((COLUMN, UNITS_OF_HIDDEN_LAYER), -1.0 / mpmath.sqrt(COLUMN), 1.0 / mpmath.sqrt(COLUMN)))
bh = tf.Variable(tf.zeros([UNITS_OF_HIDDEN_LAYER]))
h = tf.nn.sigmoid(tf.matmul(x, Wh) + bh)
# Weights and biases to output layer
Wo = tf.transpose(Wh) # tied weights
bo = tf.Variable(tf.zeros([COLUMN]))
y = tf.nn.sigmoid(tf.matmul(h, Wo) + bo)

# Objective functions
cross_entropy = tf.reduce_mean(tf.pow(x - y, 2))
optimizer = tf.train.RMSPropOptimizer(LEARNING_RATE).minimize(cross_entropy)
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)

train_number, _ = x_train.shape


for j in range(TRAINING_EPOCHS):
    sample = np.random.randint(train_number, size=BATCH_SIZE)
    batch_xs = x_train[sample][:]
    _, cost = sess.run([optimizer, cross_entropy], feed_dict={x: batch_xs})
    print("COST: ", cost)

encodedTensor = tf.nn.sigmoid(tf.add(tf.matmul(x_train, Wh), bh))
encodedData = sess.run(encodedTensor)

decodedTensor = tf.nn.sigmoid(tf.add(tf.matmul(encodedData, Wo), bo))
decodedData = sess.run(decodedTensor)
return decodedData

2 个答案:

答案 0 :(得分:0)

你尝试过不同的权重初始化,如

Wh = tf.Variable(tf.random_normal([n_inputs,n_hiddens1],0,0.1),name='W1')
bh = tf.Variable(tf.random_normal([n_hiddens1],0,0.1),name='b1')

这可以找到我的代码,更多可能

 Wo = tf.transpose(Wh) # tied weight

这不是一个好主意,因为在梯度下降张量流可能会将它们视为相同的变量或因变量,并在优化的每次迭代中修改它们

无论如何,如果您使用tensorboard,您将看到这两个bug选项中的一个是否为真

答案 1 :(得分:0)

您的损失功能是MSE。如果你切换到自动编码器的交叉熵损失会更好。在这里,您可以找到有关它的详细信息link

相关问题