A-Jのグレイスケール28 * 28アルファベットを含むnotMNISTデータセットのネットを書きました。高精度でも間違った多様な答えを与えるニューラルネット
このモデルでは、テストデータセットで89%の精度が得られますが、列車データセットから個々の画像の結果をチェックすると(カスタム画像について話していなくても)間違った結果が得られます。同じコードブロックを繰り返し実行すると、結果は1つの出力で異なります。
私はここで本当に間違ったことをしているに違いないが、私は深く学び始めている。
マイモデル - >
batch_size = 128
#tensorflow datasets
tf_train_dataset = tf.placeholder(tf.float32, shape=(batch_size, image_size*image_size))
tf_train_labels = tf.placeholder(tf.float32, shape=(batch_size, num_labels))
tf_valid_dataset = tf.constant(valid_dataset)
tf_test_dataset = tf.constant(test_dataset)
#weights and biases for layer 1
weights_l1 = tf.Variable(
tf.truncated_normal([image_size*image_size, 1024])
)
biases_l1 = tf.Variable(
tf.zeros([1024])
)
#output layer weights and biases
weights = tf.Variable(
tf.truncated_normal([1024, num_labels])
)
biases = tf.Variable(
tf.zeros([num_labels])
)
hl1 = tf.matmul(tf_train_dataset, weights_l1) + biases_l1
hl1 = tf.nn.relu(hl1)
logits = tf.matmul(hl1, weights) + biases
loss = tf.reduce_mean(
tf.nn.softmax_cross_entropy_with_logits(labels=tf_train_labels, logits=logits)
)
optimizer = tf.train.GradientDescentOptimizer(0.05).minimize(loss)
#validation predictions
v_hl1 = tf.matmul(tf_valid_dataset, weights_l1) + biases_l1
v_hl1 = tf.nn.relu(v_hl1)
v_logits = tf.matmul(v_hl1, weights) + biases
#test predictions
t_hl1 = tf.matmul(tf_test_dataset, weights_l1) + biases_l1
t_hl1 = tf.nn.relu(t_hl1)
t_logits = tf.matmul(t_hl1, weights) + biases
train_prediction = tf.nn.softmax(logits)
valid_prediction = tf.nn.softmax(v_logits)
test_prediction = tf.nn.softmax(t_logits)
トレーニング工程 - >
num_steps = 3001
with tf.Session() as session:
tf.global_variables_initializer().run()
for step in range(num_steps):
offset = (step*batch_size) % (train_labels.shape[0]-batch_size)
feed_dict = {tf_train_dataset: train_dataset[offset: offset+batch_size, :],
tf_train_labels: train_labels[offset: offset+batch_size, :]
}
_, l, predictions = session.run([optimizer, loss, train_prediction], feed_dict=feed_dict)
if(step%500 == 0):
print ('minibatch no.', step)
print ('current loss', l)
print("Minibatch accuracy: %.1f%%" % accuracy(predictions, train_labels[offset: offset+batch_size, :]))
print("Validation accuracy: %.1f%%" % accuracy(valid_prediction.eval(), valid_labels))
print("Test accuracy: %.1f%%" % accuracy(test_prediction.eval(), test_labels))
出力 - >
minibatchありません。 0 電流損失351.531 ミニバッチ精度:7.8% 検証精度:27.7% minibatch no。 500 電流損失6.78443 最小精度:82.0% 検証精度:81.9% minibatch no。 1000 電流損失6.5816 最小精度:80.5% 検証精度:81.9% minibatch no。 1500 電流損失4.70451 最小精度:81.2% 検証精度:82.4% minibatch no。 2000 電流損失3.25759 最小精度:84.4% 検証精度:79.1% minibatch no。 2500 現在の損失4.18851 ミニバッチ精度:82.8% 検証精度:81.6% minibatch no。 3000 電流損失2.84338 Minibatch精度:86.7パーセント 検証精度:83.0パーセント 試験精度:89.0パーセント
テスト>
イメージ - のための(画像が 'F' であると言うことができます)
あなたはランダムな値にネットワークを再初期化してから画像入力のために解決しようと、このコードでimage_file = 'EE.png'
image_data = (ndimage.imread(image_file).astype(float) -
pixel_depth/2)/pixel_depth
new_image_data = image_data.reshape([1, 784])
new_image_data = tf.convert_to_tensor(new_image_data)
new_image_data = tf.cast(new_image_data, dtype=tf.float32)
answer = tf.matmul(new_image_data, weights_l1) + biases_l1
answer = tf.nn.relu(answer)
answer = tf.matmul(answer, weights) + biases
answer = tf.nn.softmax(answer)
with tf.Session() as sess:
tf.global_variables_initializer().run()
print(sess.run(answer))
おかげ
ありがとうございますが、まだコードを実行できません。 feed_dictもtf_train_labelsに何らかの値を与える必要がありますか? –
また、どうしてlogitsに.eval()を適用していますか? train_predictionsに適用すべきではありませんか? –
logitsは学習された関数を記述するためです。ロジットのクロスエントロピーによって得られた損失をラベルに最適化することによって、関数が学習され、この関数を評価することによって所望の出力が得られます –