私はテンソルフローを持つニューロンネットワークを書き始めました。私の例題の各プロジェクトでは1つの問題があります。Tensorflow - 損失が高く始まり、低下しない
私の喪失は常に50以上のものから始まり、減少しないか、そうであれば、それはゆっくりして、私のすべてのエポック後には許容損失率にも達しません。
物事はそれが既にを試してみました(そしてあまり結果には影響しなかった)過学習でテストを
- が、次の例 に私が15000トレーニングと15000のテスト・データセットを持っていることがわかりますし、 900個のニューロン
- よう 何かが違うオプティマイザとオプティマイザ値
- が trainingdataが 0をaswellとしてテストデータを使用してtraingdataを増加しようとしたテスト
- は私がhttps://youtu.be/vq2nnJ4g6N0
の知識のネットワークを作成した。しかし、私たちは私testprojectsの1に見てみましょう
バッチサイズを増減試してみました:
私は名前のリストを持っています性別を仮定して、生のデータが次のように見えるようにしたいとします。
names=["Maria","Paul","Emilia",...]
genders=["f","m","f",...]
は、ネットワークにそれを供給するため、私は3つの隠れ層でネットワークを構築
names=[[77.,97. ,114.,105.,97. ,0. ,0.,...]
[80.,97. ,117.,108.,0. ,0. ,0.,...]
[69.,109.,105.,108.,105.,97.,0.,...]]
genders=[[1.,0.]
[0.,1.]
[1.,0.]]
ビット配列にcharCodesのアレイ(30のMAXLENGTHを期待)および性別に[30,20]を名前を変換、[20,10]、[10,10]、[10,2]のようになります。すべての隠れ層には、活性化機能としてのReLUがあります。出力層はソフトマックスを有する。
# Input Layer
x = tf.placeholder(tf.float32, shape=[None, 30])
y_ = tf.placeholder(tf.float32, shape=[None, 2])
# Hidden Layers
# H1
W1 = tf.Variable(tf.truncated_normal([30, 20], stddev=0.1))
b1 = tf.Variable(tf.zeros([20]))
y1 = tf.nn.relu(tf.matmul(x, W1) + b1)
# H2
W2 = tf.Variable(tf.truncated_normal([20, 10], stddev=0.1))
b2 = tf.Variable(tf.zeros([10]))
y2 = tf.nn.relu(tf.matmul(y1, W2) + b2)
# H3
W3 = tf.Variable(tf.truncated_normal([10, 10], stddev=0.1))
b3 = tf.Variable(tf.zeros([10]))
y3 = tf.nn.relu(tf.matmul(y2, W3) + b3)
# Output Layer
W = tf.Variable(tf.truncated_normal([10, 2], stddev=0.1))
b = tf.Variable(tf.zeros([2]))
y = tf.nn.softmax(tf.matmul(y3, W) + b)
は今の損失、精度のための計算とトレーニング動作は:
# Loss
cross_entropy = -tf.reduce_sum(y_*tf.log(y))
# Accuracy
is_correct = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(is_correct, tf.float32))
# Training
train_operation = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
私は100
sess = tf.Session()
sess.run(tf.global_variables_initializer())
for i in range(150):
bs = 100
index = i*bs
inputBatch = inputData[index:index+bs]
outputBatch = outputData[index:index+bs]
sess.run(train_operation, feed_dict={x: inputBatch, y_: outputBatch})
accuracyTrain, lossTrain = sess.run([accuracy, cross_entropy], feed_dict={x: inputBatch, y_: outputBatch})
if i%(bs/10) == 0:
print("step %d loss %.2f accuracy %.2f" % (i, lossTrain, accuracyTrain))
のバッチでネットワークを訓練し、私は次のような結果が得られます。
step 0 loss 68.96 accuracy 0.55
step 10 loss 69.32 accuracy 0.50
step 20 loss 69.31 accuracy 0.50
step 30 loss 69.31 accuracy 0.50
step 40 loss 69.29 accuracy 0.51
step 50 loss 69.90 accuracy 0.53
step 60 loss 68.92 accuracy 0.55
step 70 loss 68.99 accuracy 0.55
step 80 loss 69.49 accuracy 0.49
step 90 loss 69.25 accuracy 0.52
step 100 loss 69.39 accuracy 0.49
step 110 loss 69.32 accuracy 0.47
step 120 loss 67.17 accuracy 0.61
step 130 loss 69.34 accuracy 0.50
step 140 loss 69.33 accuracy 0.47
何が間違っていますか?
なぜ私のプロジェクトで〜69で始まり、それ以下ではないのですか?
はあなたに非常に多くのみんなありがとう!
これをライブラリデータセットで実行しようとしましたか?例えばhttps://archive.ics.uci.edu/ml/datasets.html名前分類を学ぶことができないかもしれないと思います – Dotan
あなたは正しいかもしれません。私は別の図書館でそれを試しましたが、その損失は1.3の下には収まらなかった... –