簡體   English   中英

tensorflow自動編碼器沒有在訓練中學習

[英]tensorflow autoencoder is not learning in training

我正在嘗試使用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

您是否嘗試過不同的重量初始化,例如

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

這不是一個好主意,因為在梯度下降中,張量流可能會將其視為相同變量或因變量,並在每次優化迭代時對其進行修改

無論如何,如果您使用張量板,您將看到這兩個錯誤選項之一是否為true

您的損失函數是MSE。 如果您切換到自動編碼器的交叉熵損失,那就更好了。 在這里,您可以找到有關它的詳細信息鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM