###前提・実現したいこと
pythonでtensorflowを使いmnistの自己符号化器を作りたいと思っています
mnistの画像処理などはグーグルのテンプレのままです。
###発生している問題・エラーメッセージ
自分で作成したコードでは中間層と出力層の間の重みの更新はうまくいったのですが、入力層と中間層の間の重みの更新がうまくいきません。中間層と出力層の間の重みは学習前と後で変わっているのですが、入力層と中間層の間の重みは学習後も初期値のままです。
特にエラーメッセージは出ていません。
###該当のソースコード
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
import tensorflow as tf
x = tf.placeholder(tf.float32, [None, 784])
W_enc = tf.Variable(tf.random_normal([784, 50],mean=0.0,stddev=0.05))
b_enc = tf.Variable(tf.random_normal([50],mean=0.0,stddev=0.05))
W_dec = tf.Variable(tf.random_normal([50,784],mean=0.0,stddev=0.05))
b_dec = tf.Variable(tf.random_normal([784],mean=0.0,stddev=0.05))
y_enc = tf.sigmoid(tf.matmul(x,W_enc) + b_enc)
y_dec = tf.sigmoid(tf.matmul(y_enc,W_dec) + b_dec)
loss = tf.nn.l2_loss(x - y_dec)
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss)
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
W_SE_value = W_enc.eval(session = sess)
print('W_enc_value = {value}'.format(value=W_SE_value))
W_SD_value = W_dec.eval(session = sess)
print('W_enc_value = {value}'.format(value=W_SD_value))
for i in range(2001):
batch_x, batch_y = mnist.train.next_batch(100)
sess.run(train_step,feed_dict={x:batch_x})
W_EE_value = W_enc.eval(session = sess)
print('W_enc_value = {value}'.format(value=W_EE_value))
W_ED_value = W_dec.eval(session = sess)
print('W_enc_value = {value}'.format(value=W_ED_value))
sess.close()
###試したこと
全く原因がわからず何もアプローチできていない状況です。
一応自己符号化ではない他クラス分類(出力層のノードを10個にして0〜9に画像を分類する)の3層のDNNを動かしたところ、そちらはちゃんと重みの更新ができていました。
###補足情報(言語/FW/ツール等のバージョンなど)
言語はpythonでdockerを使ってtensorflowは動かしています。
バージョンは全て最新のものです。
パソコンはmacbookproでosはos x el captainです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。