Tae*_*Lee 5 python ubuntu opencv number-recognition tensorflow
详细信息:Ubuntu 14.04(LTS),OpenCV 2.4.13,Spyder 2.3.9(Python 2.7),Tensorflow r0.10
我想用Python和Tensorflow(可选的OpenCV)从图像中识别Number .
另外,我想使用具有张量流的MNIST数据训练
像这样(代码被引用到这个页面的视频),
码:
import tensorflow as tf
import random
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
x = tf.placeholder("float", [None, 784])
y = tf.placeholder("float", [None, 10])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
learning_rate = 0.01
training_epochs = 25
batch_size = 100
display_step = 1
### modeling ###
activation = tf.nn.softmax(tf.matmul(x, W) + b)
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y * tf.log(activation), reduction_indices=1))
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cross_entropy)
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
### training ###
for epoch in range(training_epochs) :
avg_cost = 0
total_batch = int(mnist.train.num_examples/batch_size)
for i in range(total_batch) :
batch_xs, batch_ys =mnist.train.next_batch(batch_size)
sess.run(optimizer, feed_dict={x: batch_xs, y: batch_ys})
avg_cost += sess.run(cross_entropy, feed_dict = {x: batch_xs, y: batch_ys}) / total_batch
if epoch % display_step == 0 :
print "Epoch : ", "%04d" % (epoch+1), "cost=", "{:.9f}".format(avg_cost)
print "Optimization Finished"
### predict number ###
r = random.randint(0, mnist.test.num_examples - 1)
print "Prediction: ", sess.run(tf.argmax(activation,1), {x: mnist.test.images[r:r+1]})
print "Correct Answer: ", sess.run(tf.argmax(mnist.test.labels[r:r+1], 1))
Run Code Online (Sandbox Code Playgroud)
但是,问题是如何使numpy数组像
代码添加:
mnist.test.images[r:r+1]
Run Code Online (Sandbox Code Playgroud)
[[0. 0. 0. 0 0. 0 0. 0 0. 0 0. 0 0. 0 0. 0 0. 0 0 0. 0 0. 0 0. 0. 0-0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 0. 0-0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 0. 0-0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 0. 0-0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 0. 0-0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 0. 0 0.50196081 0.50196081 0.50196081 0.50196081 0. 0 0. 0 0. 0 0. 0 0. 0 0. 0 0. 0 0. 0 0. 0 0 0. 0 0. 0.50196081 1. 1. 1. 1. 1. 1. 0.50196081 0.25098041 0. 0 0. 0 0. 0 0. 0 0. 0 0. 0 0. 0 0. 0 0 .0.50196081 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 0.25098041 0. 0 0. 0 0. 0 0. 0 0. 0 0. 0 0 .0.0 0. 0.74901962 1. 1. 1. 1. 0.50196081 0.50196081 0.50196081 0.74901962 1. 1. 1. 0.74901962 0. 0 0. 0 0. 0 0. 0 0. 0 0. 0 0 0. 0. 0.50196081 1. 1. 1. 0.74901962 0. 0. 0. 0. 0. 0. 0.50196081 1. 1. 0.74901962 0. 0. 0. 0 0. 0 0. 0 0 0. 0 0. 0 0. 0.1 1. 1. 0.50196081 0. 0 0. 0 0. 0 0. 0. 0.25098041 1. 1. 0.74901962 0.25098041 0. 0 0. 0 0. 0. 0. 0. 0. 0 0 0.:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 0. 0-0.00.00196081 1.1.0.74901962 0. 0-0.0 0. 0 0. 0 0. 0 0.205098041 1. 1. 0.50196081 0. 0. 0. 0 0. 0 0. 0. 0. 0.50196081 1. 1. 0.25098041 0. 0 0. 0 0. 0 0. 0 0. 0 0. 0 1. 1. 0.50196081 0 0 .0.0.0.0.0-0.1.1.1.1.0.0.0.0.0.0.0.0.0.0.0.0,0.05098041 1. 1. 1. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 0.50196081 0. 0 0. 0 0. 0 0. 0 0. 0 0. 0.25098041 1. 1. 1. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0.74901962 1. 0.50196081 0. 0. 0 0. 0 0. 0 0. 0 0. 0 0. 0.74901962 1. 1. 1. 0.25098041 0. 0 0. 0 0. 0 0. 0.50196081 1. 1. 0 0. 0 0. 0 0. 0 0. 0.25098041 0.74901962 1. 1. 1. 1. 0.74901962 0. 0. 0 0. 0 0. 0. 0. 0. 0 0 0 0 0 0 0 0 0 1. 1. 1. 1. 0. 1. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 1. 1. 1. 1. 0.50196081 0. 0. 0. 0. 0 0 0. 0. 0. 0. 0. 0. 0.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 0 0. 0-0.0 0. 0 0.74901962 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 0.50196081 0. 0 0. 0 0. 0. 0. 0 0. 0 0. 0 0. 0 0. 0 0.25098041 1. 1. 1. 1. 1. 1. 1. 0.50196081 0.25098041 0. 0 0. 0 0. 0 0 .0.0.0.0.0.0.0.0.0.0,0.00.00196081 0.50196081 0.50196081 0.50196081 0. 0 0. 0 0. 0 0. 0 0 0 .0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.00.0 .0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.00.0 .0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.00.0 .0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.00.0 .0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.00.0 .0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
当我使用OpenCV解决问题时,我可以制作关于图像的numpy数组,但有点奇怪.(我想把数组变成28x28的向量)
代码添加:
image = cv2.imread("img_easy.jpg")
resized_image = cv2.resize(image, (28, 28))
Run Code Online (Sandbox Code Playgroud)
[[[255 255 255] [255 255 255] [255 255 255] ...,[255 255 255] [255 255 255] [255 255 255]]
[[255 255 255] [255 255 255] [255 255 255] ...,[255 255 255] [255 255 255] [255 255 255]]
[[255 255 255] [255 255 255] [255 255 255] ...,[255 255 255] [255 255 255] [255 255 255]]
...
[[255 255 255] [255 255 255] [255 255 255] ...,[255 255 255] [255 255 255] [255 255 255]]
[[255 255 255] [255 255 255] [255 255 255] ...,[255 255 255] [255 255 255] [255 255 255]]
[[255 255 255] [255 255 255] [255 255 255] ...,[255 255 255] [255 255 255] [255 255 255]]]
然后,我将值('resized_image')放入Tensorflow代码中.像这样,
代码修改:
### predict number ###
print "Prediction: ", sess.run(tf.argmax(activation,1), {x: resized_image})
print "Correct Answer: 9"
Run Code Online (Sandbox Code Playgroud)
结果,在该行发生错误.
ValueError:无法为Tensor u'Placeholder_2:0'提供形状值(28,28,3),其形状为'(?,784)'
最后,
1)我想知道如何制作可以输入tensorflow代码的数据(也许是numpy数组[784])
2)您是否了解使用tensorflow的数字识别示例?
我是机器学习的初学者.
请详细告诉我该怎么做.
小智 2
您使用的图像似乎是 RGB,因此是第三维(28,28,3)。
原始 MNIST 图像是宽度和高度为 28 的灰度图像。这就是为什么 x 占位符的形状为 [None, 784],因为 28*28= 784。
CV2 正在以 RGB 形式读取图像,并且您希望它是灰度图像,即 (28,28) 在进行 imread 时,您可能会发现使用它很有帮助。
image = cv2.imread("img_easy.jpg", cv2.CV_LOAD_IMAGE_GRAYSCALE)
Run Code Online (Sandbox Code Playgroud)
通过这样做,您的图像应该具有正确的形状 (28, 28)。
此外,CV2 图像值与问题中显示的 MNIST 图像不在同一范围内。您可能需要对图像中的值进行归一化,使其处于 0-1 范围内。
此外,您可能想使用 CNN(稍微更先进,但应该给出更好的结果)。有关更多详细信息,请参阅本页https://www.tensorflow.org/tutorials/上的教程。
归档时间: |
|
查看次数: |
2571 次 |
最近记录: |