tensorflow识别自己手写数字

tensorflow作为google开源的项目,现在赶超了caffe,好像成为最受欢迎的深度学习框架。确实在编写的时候更能感受到代码的真实存在,这点和caffe不同,caffe通过编写配置文件进行网络的生成。环境tensorflow是0.10的版本,注意其他版本有的语句会有错误,这是tensorflow版本之间的兼容问题。

还需要安装PIL:pip install Pillow

图片的格式:

– 图像标准化,可安装在20×20像素的框内,同时保留其长宽比。
– 图片都集中在一个28×28的图像中。
– 像素以列为主进行排序。像素值0到255,0表示背景(白色),255表示前景(黑色)。

创建一个.png的文件,背景是白色的,手写的字体是黑色的,

下面是数据测试的代码,一个两层的卷积神经网,然后用save进行模型的保存。

# coding: UTF-8
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import input_data
'''''
得到数据
'''
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) 

training = mnist.train.images
trainlable = mnist.train.labels
testing = mnist.test.images
testlabel = mnist.test.labels 

print ("MNIST loaded")
# 获取交互式的方式
sess = tf.InteractiveSession()
# 初始化变量
x = tf.placeholder("float", shape=[None, 784])
y_ = tf.placeholder("float", shape=[None, 10])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
'''''
生成权重函数,其中shape是数据的形状
'''
def weight_variable(shape):
  initial = tf.truncated_normal(shape, stddev=0.1)
  return tf.Variable(initial)
'''''
生成偏执项 其中shape是数据形状
'''
def bias_variable(shape):
  initial = tf.constant(0.1, shape=shape)
  return tf.Variable(initial) 

def conv2d(x, W):
  return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME') 

def max_pool_2x2(x):
  return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],
             strides=[1, 2, 2, 1], padding='SAME') 

W_conv1 = weight_variable([5, 5, 1, 32])
b_conv1 = bias_variable([32])
x_image = tf.reshape(x, [-1, 28, 28, 1]) 

h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
h_pool1 = max_pool_2x2(h_conv1) 

W_conv2 = weight_variable([5, 5, 32, 64])
b_conv2 = bias_variable([64]) 

h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
h_pool2 = max_pool_2x2(h_conv2) 

W_fc1 = weight_variable([7 * 7 * 64, 1024])
b_fc1 = bias_variable([1024]) 

h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64])
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1) 

keep_prob = tf.placeholder("float")
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob) 

W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10]) 

y_conv=tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2) 

cross_entropy = -tf.reduce_sum(y_*tf.log(y_conv))
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) 

# 保存网络训练的参数
saver = tf.train.Saver()
sess.run(tf.initialize_all_variables())
for i in range(8000):
 batch = mnist.train.next_batch(50)
 if i%100 == 0:
  train_accuracy = accuracy.eval(feed_dict={
    x:batch[0], y_: batch[1], keep_prob: 1.0})
  print "step %d, training accuracy %g"%(i, train_accuracy)
 train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5}) 

save_path = saver.save(sess, "model_mnist.ckpt")
print("Model saved in life:", save_path) 

print "test accuracy %g"%accuracy.eval(feed_dict={
  x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0})

其中input_data.py如下代码,是进行mnist数据集的下载的:代码是由mnist数据集提供的官方下载的版本。

# Copyright 2015 Google Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ==============================================================================
"""Functions for downloading and reading MNIST data."""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import gzip
import os
import tensorflow.python.platform
import numpy
from six.moves import urllib
from six.moves import xrange # pylint: disable=redefined-builtin
import tensorflow as tf
SOURCE_URL = 'http://yann.lecun.com/exdb/mnist/'
def maybe_download(filename, work_directory):
 """Download the data from Yann's website, unless it's already here."""
 if not os.path.exists(work_directory):
  os.mkdir(work_directory)
 filepath = os.path.join(work_directory, filename)
 if not os.path.exists(filepath):
  filepath, _ = urllib.request.urlretrieve(SOURCE_URL + filename, filepath)
  statinfo = os.stat(filepath)
  print('Successfully downloaded', filename, statinfo.st_size, 'bytes.')
 return filepath
def _read32(bytestream):
 dt = numpy.dtype(numpy.uint32).newbyteorder('>')
 return numpy.frombuffer(bytestream.read(4), dtype=dt)[0]
def extract_images(filename):
 """Extract the images into a 4D uint8 numpy array [index, y, x, depth]."""
 print('Extracting', filename)
 with gzip.open(filename) as bytestream:
  magic = _read32(bytestream)
  if magic != 2051:
   raise ValueError(
     'Invalid magic number %d in MNIST image file: %s' %
     (magic, filename))
  num_images = _read32(bytestream)
  rows = _read32(bytestream)
  cols = _read32(bytestream)
  buf = bytestream.read(rows * cols * num_images)
  data = numpy.frombuffer(buf, dtype=numpy.uint8)
  data = data.reshape(num_images, rows, cols, 1)
  return data
def dense_to_one_hot(labels_dense, num_classes=10):
 """Convert class labels from scalars to one-hot vectors."""
 num_labels = labels_dense.shape[0]
 index_offset = numpy.arange(num_labels) * num_classes
 labels_one_hot = numpy.zeros((num_labels, num_classes))
 labels_one_hot.flat[index_offset + labels_dense.ravel()] = 1
 return labels_one_hot
def extract_labels(filename, one_hot=False):
 """Extract the labels into a 1D uint8 numpy array [index]."""
 print('Extracting', filename)
 with gzip.open(filename) as bytestream:
  magic = _read32(bytestream)
  if magic != 2049:
   raise ValueError(
     'Invalid magic number %d in MNIST label file: %s' %
     (magic, filename))
  num_items = _read32(bytestream)
  buf = bytestream.read(num_items)
  labels = numpy.frombuffer(buf, dtype=numpy.uint8)
  if one_hot:
   return dense_to_one_hot(labels)
  return labels
class DataSet(object):
 def __init__(self, images, labels, fake_data=False, one_hot=False,
        dtype=tf.float32):
  """Construct a DataSet.
  one_hot arg is used only if fake_data is true. `dtype` can be either
  `uint8` to leave the input as `[0, 255]`, or `float32` to rescale into
  `[0, 1]`.
  """
  dtype = tf.as_dtype(dtype).base_dtype
  if dtype not in (tf.uint8, tf.float32):
   raise TypeError('Invalid image dtype %r, expected uint8 or float32' %
           dtype)
  if fake_data:
   self._num_examples = 10000
   self.one_hot = one_hot
  else:
   assert images.shape[0] == labels.shape[0], (
     'images.shape: %s labels.shape: %s' % (images.shape,
                         labels.shape))
   self._num_examples = images.shape[0]
   # Convert shape from [num examples, rows, columns, depth]
   # to [num examples, rows*columns] (assuming depth == 1)
   assert images.shape[3] == 1
   images = images.reshape(images.shape[0],
               images.shape[1] * images.shape[2])
   if dtype == tf.float32:
    # Convert from [0, 255] -> [0.0, 1.0].
    images = images.astype(numpy.float32)
    images = numpy.multiply(images, 1.0 / 255.0)
  self._images = images
  self._labels = labels
  self._epochs_completed = 0
  self._index_in_epoch = 0
 @property
 def images(self):
  return self._images
 @property
 def labels(self):
  return self._labels
 @property
 def num_examples(self):
  return self._num_examples
 @property
 def epochs_completed(self):
  return self._epochs_completed
 def next_batch(self, batch_size, fake_data=False):
  """Return the next `batch_size` examples from this data set."""
  if fake_data:
   fake_image = [1] * 784
   if self.one_hot:
    fake_label = [1] + [0] * 9
   else:
    fake_label = 0
   return [fake_image for _ in xrange(batch_size)], [
     fake_label for _ in xrange(batch_size)]
  start = self._index_in_epoch
  self._index_in_epoch += batch_size
  if self._index_in_epoch > self._num_examples:
   # Finished epoch
   self._epochs_completed += 1
   # Shuffle the data
   perm = numpy.arange(self._num_examples)
   numpy.random.shuffle(perm)
   self._images = self._images[perm]
   self._labels = self._labels[perm]
   # Start next epoch
   start = 0
   self._index_in_epoch = batch_size
   assert batch_size <= self._num_examples
  end = self._index_in_epoch
  return self._images[start:end], self._labels[start:end]
def read_data_sets(train_dir, fake_data=False, one_hot=False, dtype=tf.float32):
 class DataSets(object):
  pass
 data_sets = DataSets()
 if fake_data:
  def fake():
   return DataSet([], [], fake_data=True, one_hot=one_hot, dtype=dtype)
  data_sets.train = fake()
  data_sets.validation = fake()
  data_sets.test = fake()
  return data_sets
 TRAIN_IMAGES = 'train-images-idx3-ubyte.gz'
 TRAIN_LABELS = 'train-labels-idx1-ubyte.gz'
 TEST_IMAGES = 't10k-images-idx3-ubyte.gz'
 TEST_LABELS = 't10k-labels-idx1-ubyte.gz'
 VALIDATION_SIZE = 5000
 local_file = maybe_download(TRAIN_IMAGES, train_dir)
 train_images = extract_images(local_file)
 local_file = maybe_download(TRAIN_LABELS, train_dir)
 train_labels = extract_labels(local_file, one_hot=one_hot)
 local_file = maybe_download(TEST_IMAGES, train_dir)
 test_images = extract_images(local_file)
 local_file = maybe_download(TEST_LABELS, train_dir)
 test_labels = extract_labels(local_file, one_hot=one_hot)
 validation_images = train_images[:VALIDATION_SIZE]
 validation_labels = train_labels[:VALIDATION_SIZE]
 train_images = train_images[VALIDATION_SIZE:]
 train_labels = train_labels[VALIDATION_SIZE:]
 data_sets.train = DataSet(train_images, train_labels, dtype=dtype)
 data_sets.validation = DataSet(validation_images, validation_labels,
                 dtype=dtype)
 data_sets.test = DataSet(test_images, test_labels, dtype=dtype)
 return data_sets

然后进行代码的测试:

# import modules
import sys
import tensorflow as tf
from PIL import Image, ImageFilter 

def predictint(imvalue):
  """
  This function returns the predicted integer.
  The imput is the pixel values from the imageprepare() function.
  """ 

  # Define the model (same as when creating the model file)
  x = tf.placeholder(tf.float32, [None, 784])
  W = tf.Variable(tf.zeros([784, 10]))
  b = tf.Variable(tf.zeros([10])) 

  def weight_variable(shape):
    initial = tf.truncated_normal(shape, stddev=0.1)
    return tf.Variable(initial) 

  def bias_variable(shape):
    initial = tf.constant(0.1, shape=shape)
    return tf.Variable(initial) 

  def conv2d(x, W):
    return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME') 

  def max_pool_2x2(x):
    return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME') 

  W_conv1 = weight_variable([5, 5, 1, 32])
  b_conv1 = bias_variable([32]) 

  x_image = tf.reshape(x, [-1, 28, 28, 1])
  h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
  h_pool1 = max_pool_2x2(h_conv1) 

  W_conv2 = weight_variable([5, 5, 32, 64])
  b_conv2 = bias_variable([64]) 

  h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
  h_pool2 = max_pool_2x2(h_conv2) 

  W_fc1 = weight_variable([7 * 7 * 64, 1024])
  b_fc1 = bias_variable([1024]) 

  h_pool2_flat = tf.reshape(h_pool2, [-1, 7 * 7 * 64])
  h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1) 

  keep_prob = tf.placeholder(tf.float32)
  h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob) 

  W_fc2 = weight_variable([1024, 10])
  b_fc2 = bias_variable([10]) 

  y_conv = tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2) 

  init_op = tf.initialize_all_variables()
  saver = tf.train.Saver() 

  """
  Load the model_mnist.ckpt file
  file is stored in the same directory as this python script is started
  Use the model to predict the integer. Integer is returend as list.
  Based on the documentatoin at
  https://www.tensorflow.org/versions/master/how_tos/variables/index.html
  """
  with tf.Session() as sess:
    sess.run(init_op)
    saver.restore(sess, "model_mnist.ckpt")
    # print ("Model restored.") 

    prediction = tf.argmax(y_conv, 1)
    return prediction.eval(feed_dict={x: [imvalue], keep_prob: 1.0}, session=sess) 

def imageprepare(argv):
  """
  This function returns the pixel values.
  The imput is a png file location.
  """
  im = Image.open(argv).convert('L')
  width = float(im.size[0])
  height = float(im.size[1])
  newImage = Image.new('L', (28, 28), (255)) # creates white canvas of 28x28 pixels 

  if width > height: # check which dimension is bigger
    # Width is bigger. Width becomes 20 pixels.
    nheight = int(round((20.0 / width * height), 0)) # resize height according to ratio width
    if (nheight == 0): # rare case but minimum is 1 pixel
      nheigth = 1
      # resize and sharpen
    img = im.resize((20, nheight), Image.ANTIALIAS).filter(ImageFilter.SHARPEN)
    wtop = int(round(((28 - nheight) / 2), 0)) # caculate horizontal pozition
    newImage.paste(img, (4, wtop)) # paste resized image on white canvas
  else:
    # Height is bigger. Heigth becomes 20 pixels.
    nwidth = int(round((20.0 / height * width), 0)) # resize width according to ratio height
    if (nwidth == 0): # rare case but minimum is 1 pixel
      nwidth = 1
      # resize and sharpen
    img = im.resize((nwidth, 20), Image.ANTIALIAS).filter(ImageFilter.SHARPEN)
    wleft = int(round(((28 - nwidth) / 2), 0)) # caculate vertical pozition
    newImage.paste(img, (wleft, 4)) # paste resized image on white canvas 

  # newImage.save("sample.png") 

  tv = list(newImage.getdata()) # get pixel values 

  # normalize pixels to 0 and 1. 0 is pure white, 1 is pure black.
  tva = [(255 - x) * 1.0 / 255.0 for x in tv]
  return tva
  # print(tva) 

def main(argv):
  """
  Main function.
  """
  imvalue = imageprepare(argv)
  predint = predictint(imvalue)
  print (predint[0]) # first value in list 

if __name__ == "__main__":
  main('2.png')

其中我用于测试的代码如下:

可以将图片另存到路径下面,然后进行测试。

(1)载入我的手写数字的图像。
(2)将图像转换为黑白(模式“L”)
(3)确定原始图像的尺寸是最大的
(4)调整图像的大小,使得最大尺寸(醚的高度及宽度)为20像素,并且以相同的比例最小化尺寸刻度。
(5)锐化图像。这会极大地强化结果。
(6)把图像粘贴在28×28像素的白色画布上。在最大的尺寸上从顶部或侧面居中图像4个像素。最大尺寸始终是20个像素和4 + 20 + 4 = 28,最小尺寸被定位在28和缩放的图像的新的大小之间差的一半。
(7)获取新的图像(画布+居中的图像)的像素值。
(8)归一化像素值到0和1之间的一个值(这也在TensorFlow MNIST教程中完成)。其中0是白色的,1是纯黑色。从步骤7得到的像素值是与之相反的,其中255是白色的,0黑色,所以数值必须反转。下述公式包括反转和规格化(255-X)* 1.0 / 255.0

您可能感兴趣的文章:

  • tensorflow实现softma识别MNIST
  • tensorflow实现KNN识别MNIST
  • Tensorflow实现卷积神经网络用于人脸关键点识别
  • python tensorflow学习之识别单张图片的实现的示例
  • python tensorflow基于cnn实现手写数字识别
  • Tensorflow简单验证码识别应用
(0)

相关推荐

  • Tensorflow实现卷积神经网络用于人脸关键点识别

    今年来人工智能的概念越来越火,AlphaGo以4:1击败李世石更是起到推波助澜的作用.作为一个开挖掘机的菜鸟,深深感到不学习一下deep learning早晚要被淘汰. 既然要开始学,当然是搭一个深度神经网络跑几个数据集感受一下作为入门最直观了.自己写代码实现的话debug的过程和运行效率都会很忧伤,我也不知道怎么调用GPU- 所以还是站在巨人的肩膀上,用现成的框架吧.粗略了解一下,现在比较知名的有caffe.mxnet.tensorflow等等.选哪个呢?对我来说选择的标准就两个,第一要容易安

  • tensorflow实现softma识别MNIST

    识别MNIST已经成了深度学习的hello world,所以每次例程基本都会用到这个数据集,这个数据集在tensorflow内部用着很好的封装,因此可以方便地使用. 这次我们用tensorflow搭建一个softmax多分类器,和之前搭建线性回归差不多,第一步是通过确定变量建立图模型,然后确定误差函数,最后调用优化器优化. 误差函数与线性回归不同,这里因为是多分类问题,所以使用了交叉熵. 另外,有一点值得注意的是,这里构建模型时我试图想拆分多个函数,但是后来发现这样做难度很大,因为图是在规定变量

  • tensorflow实现KNN识别MNIST

    KNN算法算是最简单的机器学习算法之一了,这个算法最大的特点是没有训练过程,是一种懒惰学习,这种结构也可以在tensorflow实现. KNN的最核心就是距离度量方式,官方例程给出的是L1范数的例子,我这里改成了L2范数,也就是我们常说的欧几里得距离度量,另外,虽然是叫KNN,意思是选取k个最接近的元素来投票产生分类,但是这里只是用了最近的那个数据的标签作为预测值了. __author__ = 'freedom' import tensorflow as tf import numpy as n

  • python tensorflow基于cnn实现手写数字识别

    一份基于cnn的手写数字自识别的代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # 加载数据集 mnist = input_data.read_data_sets('MNIST_data', one_hot=True) # 以交互式方式启动session # 如果不使用交互式session,则在启动s

  • Tensorflow简单验证码识别应用

    简单的Tensorflow验证码识别应用,供大家参考,具体内容如下 1.Tensorflow的安装方式简单,在此就不赘述了. 2.训练集训练集以及测试及如下(纯手工打造,所以数量不多): 3.实现代码部分(参考了网上的一些实现来完成的) main.py(主要的神经网络代码) from gen_check_code import gen_captcha_text_and_image_new,gen_captcha_text_and_image from gen_check_code import

  • python tensorflow学习之识别单张图片的实现的示例

    假设我们已经安装好了tensorflow. 一般在安装好tensorflow后,都会跑它的demo,而最常见的demo就是手写数字识别的demo,也就是mnist数据集. 然而我们仅仅是跑了它的demo而已,可能很多人会有和我一样的想法,如果拿来一张数字图片,如何应用我们训练的网络模型来识别出来,下面我们就以mnist的demo来实现它. 1.训练模型 首先我们要训练好模型,并且把模型model.ckpt保存到指定文件夹 saver = tf.train.Saver() saver.save(s

  • tensorflow识别自己手写数字

    tensorflow作为google开源的项目,现在赶超了caffe,好像成为最受欢迎的深度学习框架.确实在编写的时候更能感受到代码的真实存在,这点和caffe不同,caffe通过编写配置文件进行网络的生成.环境tensorflow是0.10的版本,注意其他版本有的语句会有错误,这是tensorflow版本之间的兼容问题. 还需要安装PIL:pip install Pillow 图片的格式: – 图像标准化,可安装在20×20像素的框内,同时保留其长宽比. – 图片都集中在一个28×28的图像中

  • Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】

    本文实例讲述了Python tensorflow实现mnist手写数字识别.分享给大家供大家参考,具体如下: 非卷积实现 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data data_path = 'F:\CNN\data\mnist' mnist_data = input_data.read_data_sets(data_path,one_hot=True) #offline da

  • Tensorflow训练MNIST手写数字识别模型

    本文实例为大家分享了Tensorflow训练MNIST手写数字识别模型的具体代码,供大家参考,具体内容如下 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data INPUT_NODE = 784 # 输入层节点=图片像素=28x28=784 OUTPUT_NODE = 10 # 输出层节点数=图片类别数目 LAYER1_NODE = 500 # 隐藏层节点数,只有一个隐藏层 BATCH

  • 基于Tensorflow的MNIST手写数字识别分类

    本文实例为大家分享了基于Tensorflow的MNIST手写数字识别分类的具体实现代码,供大家参考,具体内容如下 代码如下: import tensorflow as tf import numpy as np from tensorflow.examples.tutorials.mnist import input_data from tensorflow.contrib.tensorboard.plugins import projector import time IMAGE_PIXELS

  • Python(TensorFlow框架)实现手写数字识别系统的方法

    手写数字识别算法的设计与实现 本文使用python基于TensorFlow设计手写数字识别算法,并编程实现GUI界面,构建手写数字识别系统.这是本人的本科毕业论文课题,当然,这个也是机器学习的基本问题.本博文不会以论文的形式展现,而是以编程实战完成机器学习项目的角度去描述. 项目要求:本文主要解决的问题是手写数字识别,最终要完成一个识别系统. 设计识别率高的算法,实现快速识别的系统. 1 LeNet-5模型的介绍 本文实现手写数字识别,使用的是卷积神经网络,建模思想来自LeNet-5,如下图所示

  • 如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)

    [尊重原创,转载请注明出处]https://blog.csdn.net/guyuealian/article/details/79672257 项目Github下载地址:https://github.com/PanJinquan/Mnist-tensorFlow-AndroidDemo 本博客将以最简单的方式,利用TensorFlow实现了MNIST手写数字识别,并将Python TensoFlow训练好的模型移植到Android手机上运行.网上也有很多移植教程,大部分是在Ubuntu(Linu

  • 基于TensorFlow的CNN实现Mnist手写数字识别

    本文实例为大家分享了基于TensorFlow的CNN实现Mnist手写数字识别的具体代码,供大家参考,具体内容如下 一.CNN模型结构 输入层:Mnist数据集(28*28) 第一层卷积:感受视野5*5,步长为1,卷积核:32个 第一层池化:池化视野2*2,步长为2 第二层卷积:感受视野5*5,步长为1,卷积核:64个 第二层池化:池化视野2*2,步长为2 全连接层:设置1024个神经元 输出层:0~9十个数字类别 二.代码实现 import tensorflow as tf #Tensorfl

  • Python神经网络TensorFlow基于CNN卷积识别手写数字

    目录 基础理论 一.训练CNN卷积神经网络 1.载入数据 2.改变数据维度 3.归一化 4.独热编码 5.搭建CNN卷积神经网络 5-1.第一层:第一个卷积层 5-2.第二层:第二个卷积层 5-3.扁平化 5-4.第三层:第一个全连接层 5-5.第四层:第二个全连接层(输出层) 6.编译 7.训练 8.保存模型 代码 二.识别自己的手写数字(图像) 1.载入数据 2.载入训练好的模型 3.载入自己写的数字图片并设置大小 4.转灰度图 5.转黑底白字.数据归一化 6.转四维数据 7.预测 8.显示

  • TensorFlow教程Softmax逻辑回归识别手写数字MNIST数据集

    基于MNIST数据集的逻辑回归模型做十分类任务 没有隐含层的Softmax Regression只能直接从图像的像素点推断是哪个数字,而没有特征抽象的过程.多层神经网络依靠隐含层,则可以组合出高阶特征,比如横线.竖线.圆圈等,之后可以将这些高阶特征或者说组件再组合成数字,就能实现精准的匹配和分类. import tensorflow as tf import numpy as np import input_data print('Download and Extract MNIST datas

随机推荐