Машинное обучение Tensorflow Notes 1: Hello World to MNIST Experiment

TensorFlow Docker
Машинное обучение Tensorflow Notes 1: Hello World to MNIST Experiment

Недавно я реорганизовал свой карьерный план. Среди них искусственный интеллект является самым важным направлением моей карьеры, поэтому я начал изучать искусственный интеллект. Tensorflow — очень популярная структура в машинном обучении. красивое направление. Поскольку изучение новых методов не применяется к реальному проекту, поэтому оставьте точкублогиgithub, или вы не будете знать, что вы узнали в конце.

Некоторые люди говорят: Tensorflow может повлиять на мир более глубоко, чем система Android!

процесс изучения

Установить

Я установил его через образ Docker, установка очень проста, а установка через Docker может сохранить нашу компьютерную среду, не загрязняя нашу компьютерную среду.Вы можете просто удалить экземпляр, когда он вам не нужен.Мой компьютер - Macbook Pro , а инструмент визуализации Docker, который я использую, —Kitematic, введите Tensorflow для поиска, нажмитеCREATE, подождите немного, чтобы завершить установку.

image.png
После установки нажмитеSTARTдля запуска экземпляра, и в командной строке появится URL-адрес
image.png
Следует отметить, что этот номер порта является номером порта системы Linux экземпляра Docker и должен быть изменен на номер порта сопоставленного локального компьютера.
image.png

Тогда адрес доступа моей консоли Tensorflow:

http://localhost:32770/?token=fc9e43daca92166cf756f84695e71d300f26df757207ad03
консоль

Введите URL-адрес для доступа к веб-консоли Tensorflow, и код, который мы написали, может быть выполнен на консоли, конечно, вы также можете нажать напрямуюDockerВверхEXEC, доступ через командную строку

image.png
Командная строка
image.png
Эксперимент HelloWorld

В веб-консоли нажмитеNew-Python2

image.png
Введите код Python и нажмитеRun, тогда HelloWorld завершится
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print sess.run(hello)
a = tf.constant(10.)
b = tf.constant(32.)
print sess.run(a+b)
image.png

Что касается значения кода, просто испытайте его на себе, я не вижу, чтобы этот HelloWorld имел несколько значений, по крайней мере, он показывает, что вы уже вышли из шага HelloWorld. [смеющийся и плачущий смайлик]

Машинное обучение MNIST (эксперимент по распознаванию цифр изображения)

Полное название MNIST — это смешанная база данных Национального института стандартов и технологий, которая представляет собой серию помеченных цифровых изображений. Этот эксперимент на самом деле предназначен для определения чисел на картинках, что является одним из самых классических случаев машинного обучения.

image.png
Этот эксперимент заключается в том, чтобы идентифицировать вышеприведенные изображения по отдельности.5,0,4,1.
Создайтеinput_data.pyдокумент

Создайтеinput_data.pyфайл, скопируйте следующий код в папку, или вы можете создать файл на компьютере и загрузить его через консоль

"""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
image.png
запустить код

Из приведенного выше примера HelloWorld мы уже знаем, как работает код, скопируйте следующий код:

import tensorflow as tf
import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
x = tf.placeholder("float", [None, 784.])
W = tf.Variable(tf.zeros([784.,10.]))
b = tf.Variable(tf.zeros([10.]))
y = tf.nn.softmax(tf.matmul(x,W) + b)
y_ = tf.placeholder("float", [None,10.])
cross_entropy = -tf.reduce_sum(y_*tf.log(y))
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
for i in range(1000):
  batch_xs, batch_ys = mnist.train.next_batch(100)
  sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
# 检测我们的预测
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
print sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})
результат

Введите код и нажмите «Выполнить», потому что вам нужно загрузить файл и выполнить код, подождите несколько секунд, и вы сможете увидеть точность модели, которую мы рассчитали на тестовом наборе данных:0.9158,

image.png
Если при запуске возникает сетевая ошибка, загрузите файл вручную в папку «Для».

Набор данных для этого эксперимента можно получить изyann.lecun.com/exdb/mnistСкачать, содержит четыре файла:

训练图片集合: train-images-idx3-ubyte.gz (包含 60,000 个图片样本)
训练标签集合: train-labels-idx1-ubyte.gz (包含 60,000 个数字标签)
测试图片集合: t10k-images-idx3-ubyte.gz (包含 10,000 个图片样本)
测试标签集合: t10k-labels-idx1-ubyte.gz (包含 10,000 个数字标签)

Консоль сначала создает папкуMNIST_data, затем загрузите четыре файла вMNIST_dataпапка

image.png
Нажмите [1], чтобы выбрать четыре файла, а затем нажмите [2].Uploadэто реальная загрузка.
image.png

Суммировать

Вышеизложенное — это просто мой личный процесс обучения, здесь не так много анализа принципа, в дальнейшем будет больше статей по теме.
«Машинное обучение Tensorflow Notes 2: сверхдетальный анализ экспериментов MNIST»