我为notMNIST数据集写了一个网,其中包含来自A-J的灰度28 * 28字母。
模型在测试数据集上的准确度为89%,但是当我从列车数据集中检查单个图像的结果时(甚至没有谈到自定义图像),它会给出错误的结果,如果我一次又一次地运行相同的代码块,结果因单个输出而异。
我必须在这里做错事,但我刚开始深入学习。
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 no。 0 目前亏损351.531 迷你精度:7.8% 验证准确度:27.7% 小批量没有。 500 目前亏损6.78443 迷你精度:82.0% 验证准确率:81.9% 小批量没有。 1000 当前亏损6.5816 迷你精度:80.5% 验证准确率:81.9% 小批量没有。 1500 目前亏损4.70451 迷你精度:81.2% 验证准确率:82.4% 小批量没有。 2000 目前亏损3.25759 迷你精度:84.4% 验证准确度:79.1% 小批量没有。 2500 目前亏损4.18851 迷你精度:82.8% 验证准确度:81.6% 小批量没有。 3000 当前亏损2.84338 迷你精度: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))
由于
答案 0 :(得分:1)
使用此代码,您可以将网络重新初始化为随机值,然后尝试解决您的图像输入问题。
with tf.Session() as sess:
tf.global_variables_initializer().run()
print(sess.run(answer))
以下代码生成所需的输出:
logits.eval(feed_dict={tf_train_dataset:answer})
您可以在测试和验证集上重复使用变量进行计算。您不必使用新的张量。如果要使用不同的变量,则需要访问相同的变量。我恳请您完成tensorflow主页提供的标准MNIST教程,以了解基本概念。
如果您不需要理解这些概念,我可以指向keras(https://keras.io/),这是tensorflow的包装器,它隐藏了这种复杂性。