Tensorflow python для чайников

Краткое руководство по TensorFlow 2 для начинающих

Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.

Это краткое введение использует Keras для:

  1. Загрузите готовый набор данных.
  2. Создайте модель машинного обучения нейронной сети, которая классифицирует изображения.
  3. Обучите эту нейронную сеть.
  4. Оцените точность модели.

Это руководство представляет собой записную книжку Google Colaboratory . Программы на Python запускаются непосредственно в браузере — отличный способ изучить и использовать TensorFlow. Чтобы следовать этому руководству, запустите блокнот в Google Colab, нажав кнопку в верхней части этой страницы.

  1. В Colab подключитесь к среде выполнения Python: в правом верхнем углу строки меню выберите ПОДКЛЮЧИТЬСЯ .
  2. Запустите все ячейки кода записной книжки. Выберите « Среда выполнения » > « Выполнить все» .

Настроить TensorFlow.

Импортируйте TensorFlow в свою программу, чтобы начать:

import tensorflow as tf print("TensorFlow version:", tf.__version__) 
TensorFlow version: 2.8.0-rc1

Если вы используете собственную среду разработки, а не Colab , см. руководство по установке для настройки TensorFlow для разработки.

Примечание. Убедитесь, что вы выполнили обновление до последней версии пакета pip 2, если вы используете собственную среду разработки. Подробнее см. в руководстве по установке .

Загрузите набор данных

Загрузите и подготовьте набор данных MNIST . Преобразуйте данные выборки из целых чисел в числа с плавающей запятой:

mnist = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 

Построить модель машинного обучения

Создайте модель tf.keras.Sequential путем наложения слоев.

model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10) ]) 

Для каждого примера модель возвращает вектор оценок логитов или логарифмических шансов , по одному для каждого класса.

predictions = model(x_train[:1]).numpy() predictions 
array([[ 0.2760778 , -0.39324787, -0.17098302, 1.2016621 , -0.03416392, 0.5461229 , -0.7203061 , -0.41886678, -0.59480035, -0.7580608 ]], dtype=float32)

Функция tf.nn.softmax преобразует эти логиты в вероятности для каждого класса:

tf.nn.softmax(predictions).numpy() 
array([[0.11960829, 0.06124588, 0.0764901 , 0.30181262, 0.08770514, 0.15668967, 0.04416083, 0.05969675, 0.05006609, 0.04252464]], dtype=float32)

Примечание. Можно встроить функцию tf.nn.softmax в функцию активации для последнего уровня сети. Хотя это может сделать выходные данные модели более интерпретируемыми, этот подход не рекомендуется, поскольку невозможно обеспечить точный и численно стабильный расчет потерь для всех моделей при использовании выходных данных softmax.

Определите функцию потерь для обучения с использованием losses.SparseCategoricalCrossentropy , которая принимает вектор логитов и индекс True и возвращает скалярную потерю для каждого примера.

loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True) 

Эта потеря равна отрицательной логарифмической вероятности истинного класса: потеря равна нулю, если модель уверена в правильном классе.

Эта необученная модель дает вероятности, близкие к случайным (1/10 для каждого класса), поэтому начальная потеря должна быть близка к -tf.math.log(1/10) ~= 2.3 .

loss_fn(y_train[:1], predictions).numpy() 

Перед началом обучения настройте и скомпилируйте модель с помощью Model.compile . Установите класс optimizer на adam , установите loss на функцию loss_fn , которую вы определили ранее, и укажите метрику, которая будет оцениваться для модели, установив параметр metrics на accuracy .

model.compile(optimizer='adam', loss=loss_fn, metrics=['accuracy']) 

Обучите и оцените свою модель

Используйте метод Model.fit , чтобы настроить параметры модели и минимизировать потери:

model.fit(x_train, y_train, epochs=5) 

Epoch 1/5 1875/1875 [==============================] — 4s 2ms/step — loss: 0.2950 — accuracy: 0.9143 Epoch 2/5 1875/1875 [==============================] — 3s 2ms/step — loss: 0.1451 — accuracy: 0.9567 Epoch 3/5 1875/1875 [==============================] — 4s 2ms/step — loss: 0.1080 — accuracy: 0.9668 Epoch 4/5 1875/1875 [==============================] — 4s 2ms/step — loss: 0.0906 — accuracy: 0.9717 Epoch 5/5 1875/1875 [==============================] — 4s 2ms/step — loss: 0.0749 — accuracy: 0.9761

Метод Model.evaluate проверяет производительность моделей, обычно на » Validation-set » или » Test-set «.

model.evaluate(x_test, y_test, verbose=2) 
313/313 - 1s - loss: 0.0783 - accuracy: 0.9755 - 588ms/epoch - 2ms/step [0.07825208455324173, 0.9754999876022339]

Классификатор изображений теперь обучен с точностью ~ 98% на этом наборе данных. Чтобы узнать больше, прочитайте туториалы по TensorFlow .

Если вы хотите, чтобы ваша модель возвращала вероятность, вы можете обернуть обученную модель и прикрепить к ней softmax:

probability_model = tf.keras.Sequential([ model, tf.keras.layers.Softmax() ]) 

Вывод

Поздравляем! Вы обучили модель машинного обучения, используя готовый набор данных с помощью API Keras .

Дополнительные примеры использования Keras см. в туториалах . Чтобы узнать больше о построении моделей с помощью Keras, прочитайте руководства . Если вы хотите узнать больше о загрузке и подготовке данных, см. руководства по загрузке данных изображения или загрузке данных CSV .

Если не указано иное, контент на этой странице предоставляется по лицензии Creative Commons «С указанием авторства 4.0», а примеры кода – по лицензии Apache 2.0. Подробнее об этом написано в правилах сайта. Java – это зарегистрированный товарный знак корпорации Oracle и ее аффилированных лиц.

Последнее обновление: 2022-01-26 UTC.

Источник

Python. TensorFlow для чайников. Часть 1.

TensorFlow — это мощная библиотека для создания нейронных сетей. На уроке Пишем нейросеть на Python. Часть 1 я уже писал, как сделать нейросеть на Python. Поскольку вторая часть пока в работе, решил написать статью про TensorFlow, ибо это поистине великолепный инструмент. Если раньше нам надо было создавать свои классы, чтобы хранить информацию о весах нейрона, объединять их в слои и еще добавлять туда алгоритмы обучения, то теперь все это есть в TensorFlow.

Как его установить? Сначала скачиваем whl файл, затем устанавливаем его, примерно вот так:

C:\Users\user\AppData\Local\Programs\Python\Python36\python.exe -m pip install tensorflow-1.2.0rc2-cp36-cp36m-win_amd64.whl

Итак, сначала попробуем создать простой нейрон с одним входом и выходом, который реализует линеную функцию:

import tensorflow as tf #Создадим граф graph = tf.get_default_graph() #Создадим входное значение input_value = tf.constant(1.0) #Создадим переменную weight = tf.Variable(0.8) #Создаим выходное значение output_value = weight * input_value

Мы создали простой нейрон со входом, выходом, и одним входным весовых коэффициентом. Чтобы попользоваться им, нам нужно создать сессию:

#создаим сессию sess = tf.Session()

Затем инициализировать переменные:

init=tf.global_variables_initializer() sess.run(init)

После этого мы можем вывести значение на экран:

У нас выведет 0.8 — результат умножения входного значения 1 на весовой коэффициент 0.8.

Теперь попробуем его обучить. Допустим, мы желаем получить на выходе не 0.8, а к примеру 2. В этом случае нам надо задать желаемое значение, функцию ошибки и оптимизатор:

#Создаем оптимизиатор desired_output_value = tf.constant(2.0) loss = (output_value - desired_output_value)**2 #Функция ошибки optim = tf.train.GradientDescentOptimizer(learning_rate=0.025) #Оптимизатор grads_and_vars = optim.compute_gradients(loss)

А потом еще надо итерационно, много раз применить оптимизацию (в цикле), вот так:

#Обучаем train_step = tf.train.GradientDescentOptimizer(0.025).minimize(loss) for i in range(100): sess.run(train_step)

А вот весь код нашего примера:

import tensorflow as tf #Создадим граф graph = tf.get_default_graph() #Создадим входное значение input_value = tf.constant(1.0) #Создадим переменную weight = tf.Variable(0.8) #Создаим выходное значение output_value = weight * input_value #создаим сессию sess = tf.Session() #Создаем оптимизиатор desired_output_value = tf.constant(2.0) loss = (output_value - desired_output_value)**2 #Функция ошибки optim = tf.train.GradientDescentOptimizer(learning_rate=0.025) #Оптимизатор grads_and_vars = optim.compute_gradients(loss) #Инициализируем переменные init=tf.global_variables_initializer() sess.run(init) #Обучаем train_step = tf.train.GradientDescentOptimizer(0.025).minimize(loss) for i in range(100): sess.run(train_step) print(sess.run(output_value))

В результате мы получим число, близкое к 2 (к нашему желаемому выходу), например 1.9929.

Часто для оцени процесса обучения смотрят график обучения, на котором, как правило, отображается ошибка обучения (как она уменьшается со временем). Давайте и мы так же сделаем, воспользовавшись питоновской библиотекой научной графики.

Для этого нам надо импортунть саму библиотеку, в цикл обучения вставать код, который будет выводить значение ошибки на каждой итерации в список или массив, и отобразить этот список или массив на графике. Вот полный код программы с данными изменениями:

import tensorflow as tf import matplotlib.pyplot as plt #Создадим граф graph = tf.get_default_graph() #Создадим входное значение input_value = tf.constant(1.0) #Создадим переменную weight = tf.Variable(0.8) #Создаим выходное значение output_value = weight * input_value #создаим сессию sess = tf.Session() #Создаем оптимизиатор desired_output_value = tf.constant(2.0) loss = (output_value - desired_output_value)**2 #Функция ошибки optim = tf.train.GradientDescentOptimizer(learning_rate=0.025) #Оптимизатор grads_and_vars = optim.compute_gradients(loss) #Инициализируем переменные init=tf.global_variables_initializer() sess.run(init) #задаем начальные массивы x=[] y=[] #Обучаем train_step = tf.train.GradientDescentOptimizer(0.025).minimize(loss) for i in range(100): sess.run(train_step) x.append(i) y.append(sess.run(loss)) print(sess.run(output_value)) #Строим график fig = plt.figure() plt.plot(x, y) #Отображаем заголовки и подписи осей plt.title('График функции') plt.ylabel('Ось Y') plt.xlabel('Ось X') plt.grid(True) plt.show()

А вот сам график обучения:

Источник

Читайте также:  Моя веб-страница
Оцените статью