TensorFlow MNIST手写数据集的实现方法
MNIST数据集介绍
MNIST数据集中包含了各种各样的手写数字图片,数据集的官网是:http://yann.lecun.com/exdb/mnist/index.html,我们可以从这里下载数据集。使用如下的代码对数据集进行加载:
fromtensorflow.examples.tutorials.mnistimportinput_data
mnist=input_data.read_data_sets('MNIST_data',one_hot=True)
运行上述代码会自动下载数据集并将文件解压在MNIST_data文件夹下面。代码中的one_hot=True,表示将样本的标签转化为one_hot编码。
MNIST数据集中的图片是28*28的,每张图被转化为一个行向量,长度是28*28=784,每一个值代表一个像素点。数据集中共有60000张手写数据图片,其中55000张训练数据,5000张测试数据。
在MNIST中,mnist.train.images是一个形状为[55000,784]的张量,其中的第一个维度是用来索引图片,第二个维度图片中的像素。MNIST数据集包含有三部分,训练数据集,验证数据集,测试数据集(mnist.validation)。
标签是介于0-9之间的数字,用于描述图片中的数字,转化为one-hot向量即表示的数字对应的下标为1,其余的值为0。标签的训练数据是[55000,10]的数字矩阵。
下面定义了一个简单的网络对数据集进行训练,代码如下:
importtensorflowastf
importnumpyasnp
fromtensorflow.examples.tutorials.mnistimportinput_data
importmatplotlib.pyplotasplt
mnist=input_data.read_data_sets('MNIST_data',one_hot=True)
tf.reset_default_graph()
x=tf.placeholder(tf.float32,[None,784])
y=tf.placeholder(tf.float32,[None,10])
w=tf.Variable(tf.random_normal([784,10]))
b=tf.Variable(tf.zeros([10]))
pred=tf.matmul(x,w)+b
pred=tf.nn.softmax(pred)
cost=tf.reduce_mean(-tf.reduce_sum(y*tf.log(pred),reduction_indices=1))
learning_rate=0.01
optimizer=tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
training_epochs=25
batch_size=100
display_step=1
save_path='model/'
saver=tf.train.Saver()
withtf.Session()assess:
sess.run(tf.global_variables_initializer())
forepochinrange(training_epochs):
avg_cost=0
total_batch=int(mnist.train.num_examples/batch_size)
foriinrange(total_batch):
batch_xs,batch_ys=mnist.train.next_batch(batch_size)
_,c=sess.run([optimizer,cost],feed_dict={x:batch_xs,y:batch_ys})
avg_cost+=c/total_batch
if(epoch+1)%display_step==0:
print('epoch=',epoch+1,'cost=',avg_cost)
print('finished')
correct_prediction=tf.equal(tf.argmax(pred,1),tf.argmax(y,1))
accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
print('accuracy:',accuracy.eval({x:mnist.test.images,y:mnist.test.labels}))
save=saver.save(sess,save_path=save_path+'mnist.cpkt')
print("starting2ndsession......")
withtf.Session()assess:
sess.run(tf.global_variables_initializer())
saver.restore(sess,save_path=save_path+'mnist.cpkt')
correct_prediction=tf.equal(tf.argmax(pred,1),tf.argmax(y,1))
accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
print('accuracy:',accuracy.eval({x:mnist.test.images,y:mnist.test.labels}))
output=tf.argmax(pred,1)
batch_xs,batch_ys=mnist.test.next_batch(2)
outputval=sess.run([output],feed_dict={x:batch_xs,y:batch_ys})
print(outputval)
im=batch_xs[0]
im=im.reshape(-1,28)
plt.imshow(im,cmap='gray')
plt.show()
im=batch_xs[1]
im=im.reshape(-1,28)
plt.imshow(im,cmap='gray')
plt.show()
总结
以上所述是小编给大家介绍的TensorFlowMNIST手写数据集的实现方法,希望对大家有所帮助!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。