предисловие
Я до сих пор помню, как неделю назад у меня были некоторые идеи о графическом коде подтверждения, и я был уверен, что смогу выполнить работу по взлому, но на самом деле меня били по лицу самые разные люди.
открытие
В современном Интернете люди не случайно произносят такие слова, как глубокое обучение, искусственный интеллект, машинное обучение, нейронная сеть и т. д. Люди подозревают, что он фальшивый интернет-человек, но я не знаю, есть ли такие одноклассники, как JB кто не может отличить.
Я не очень хотел окунаться в эту воду, ведь я знал, что я не тот материал, но недавно я был измотан проверочным кодом, а графический проверочный код действительно является точкой глубокого обучения, так что Я все еще хочу это записать и понять. , хотя бы иметь небольшое представление о концепции, и это не пустая трата времени;
Пользователи Xiaobai, если с этой частью что-то не так, пожалуйста, сообщите об этом вовремя, спасибо~
Грамотность
глубокое обучение, искусственный интеллект, машинное обучение, нейронные сети, эти четыре слова встречаются чаще, но какая между ними связь? В частности, в чем разница между машинным обучением и глубоким обучением? ?
Искусственный интеллект, английский Искусственный интеллект, именуемый ИИ, какова цель искусственного интеллекта?
Их очень много в интернете, которые называются освобождение/развитие производительных сил, освобождение человека и вообще повышение эффективности.
Но лучше понять:быть ленивым!
Например, когда вы произносите предложение, машина может распознать его как текст, понять смысл ваших слов, провести анализ и диалог и т. д.
Суть искусственного интеллекта заключена в слове «интеллект», так откуда же берется интеллект? В основном благодаря методу создания искусственного интеллекта...машинное обучение;
Каковы текущие сценарии применения искусственного интеллекта:
OCR, голосовые технологии (например, Siri), приложения для работы с большими данными и т. д.~
Машинное обучение: подход к искусственному интеллекту
В своей основе машинное обучение использует алгоритмы для анализа данных, извлечения уроков из них, а затем принятия решений и прогнозов относительно событий.
Его нужно «обучить» на большом количестве данных, и различные алгоритмы учатся на данных, как выполнять задачу.
Например, при просмотре интернет-магазинов часто появляется информация о рекомендациях товаров.
Это торговый центр, чтобы определить, какие из этих продуктов действительно интересны и готовы купить, основываясь на предыдущих отчетах о покупках и длинных списках коллекций.
Такая модель принятия решений может помочь торговому центру предоставить покупателям рекомендации и стимулировать потребление продукта.
[Существует три типа машинного обучения]:
Первая категория - это обучение без учителя, которое относится к автоматическому поиску шаблонов из информации и их классификации по различным категориям, иногда называемым «проблемами кластеризации».
Второй тип обучения с учителем.Обучение с учителем относится к присвоению ярлыка истории и использованию модели для прогнозирования результата.
Если есть фрукт, мы судим, банан это или яблоко, основываясь на форме и цвете фрукта, что является примером контролируемого обучения.
Последняя категория - это обучение с подкреплением, которое относится к методу обучения, который может использоваться для поддержки принятия решений и планирования людьми. Это механизм обратной связи, который поощряет некоторые действия и поведение людей. Обучение продвигается через этот механизм обратной связи, который Подобно человеческому Обучение похоже, поэтому обучение с подкреплением является одним из важных направлений текущих исследований.
Глубокое обучение: метод реализации машинного обучения
Глубокое обучение — это подраздел машинного обучения, в котором используются глубокие нейронные сети для усложнения моделей, чтобы модели могли более глубоко понимать данные;
Суть глубокого обучения заключается в том, что теперь у нас есть достаточно быстрые компьютеры и достаточно данных для обучения больших нейронных сетей.
Различия и связи между тремя
Машинное обучение — это метод достижения искусственного интеллекта, а глубокое обучение — это технология машинного обучения.
По мнению JB, глубокое обучение может в конечном итоге проникнуть во все другие алгоритмы машинного обучения;
Конечно, это не означает, что глубокое обучение всемогуще и не обязательно лучше, чем машинное обучение, его следует различать в зависимости от сцены;
Искусственные нейронные сети: алгоритм машинного обучения
Возьмем в качестве примера «Стоп», разберем все элементы изображения стоп-сигнала, а затем «проверим» его с помощью нейронов: восьмиугольная форма, красный, как пожарная машина, яркий и заметный Типичные размеры букв, дорожных знаков и характеристики стационарного движения и др. Задача нейронной сети состоит в том, чтобы сделать вывод, является ли это знаком остановки или нет. На основе всех весов нейросеть составляет продуманное предположение — «вектор вероятности».
Нейронные сети нужно модулировать и обучать, иначе будет легко ошибиться~
хорошо, на данный момент я чувствую, что у меня есть некоторое понимание этой части информации ~ по крайней мере, я знаю, что это такое;
Кратко резюмируя:
Машинное обучение — это метод реализации искусственного интеллекта, глубокое обучение — это технология, реализующая машинное обучение, а нейронная сеть — это алгоритм, реализующий машинное обучение.
Введение в TensorFlow
TensorFlow — это система искусственного интеллекта, исходный код которой был открыт Google в ноябре 2015 года.Адрес проекта на гитхабе, система может использоваться в распознавании речи, распознавании изображений и других областях.
Введение в TensorFlow на официальном сайте:
Программная библиотека с открытым исходным кодом для численных вычислений с использованием методов графа потока данных.
- Узлы в графе потока данных, представляющие числовые операции;
- Ребра между узлами представляют собой некоторую связь между многомерными данными (тензорами).
- Функционал системы можно использовать на различных устройствах (включая CPU или GPU) с помощью простых вызовов API.
TensorFlow — это проект разработчиков из команды Google Brain.
Что такое диаграмма потока данных
Граф потока данных — это описание процесса численных вычислений в ориентированном графе. Узлы в ориентированном графе обычно представляют собой математические операции, но они также могут представлять такие операции, как ввод данных, вывод, чтение и запись; ребра в ориентированном графе представляют собой определенную связь между узлами, которые отвечают за передачу многомерных данных ( Тензоры).
Узлы могут быть распределены по нескольким вычислительным устройствам и могут выполнять операции асинхронно и параллельно. Поскольку это ориентированный граф, текущий узел может выполнять операции только после завершения состояния вычисления предыдущих узлов в степени.
Особенности TensorFlow
- Гибкость, TensorFlow не является строго набором инструментов для нейронной сети, вы можете делать с TensorFlow все, что угодно, если вы можете использовать граф потока данных для описания своего вычислительного процесса. Вы также можете легко строить диаграммы потоков данных по мере необходимости, используя простой язык Python для реализации высокоуровневых функций.
- Портативность, TensorFlow может работать на любом устройстве с процессором или графическим процессором, вы можете сосредоточиться на реализации своих идей, не задумываясь о проблемах с аппаратной средой, вы даже можете использовать технологию Docker для реализации связанных облачных сервисов.
- Повышайте эффективность разработки, TensorFlow может повысить эффективность производства того, что вы исследуете, и может легко делиться кодом с вашими коллегами — поддержка языковых параметров, в настоящее время TensorFlow поддерживает языки Python и C++.
- Полноценно используйте аппаратные ресурсы, чтобы максимизировать производительность вычислений.
Установка TensorFlow
Я нашел много способов, но в конце концов сдался, потому что это было неосуществимо, и было слишком много вещей, на которые можно было положиться.В конце концов, JB решил использовать pycharm для установки TensorFlow;
pycharm — это IDE-программа для Python, в ней удобнее устанавливать библиотеку, а также удобно писать код;
Откройте pycharm, fly-settings в строке меню, непосредственно найдите проект inter, выберите используемый вами компилятор и нажмите + напрямую:
Войдите в tensorflow, установите пакет, а затем дождитесь долгого процесса установки;
Конечно, для тех, кто любит высокую сложность, вы можете прочитать введение на официальном сайте github, желаю вам удачи~
https://github.com/jikexueyuanwiki/tensorflow-zh/blob/master/SOURCE/get_started/os_setup.md
проверять
непосредственныйimport tensorflow, запустите и попробуйте посмотреть, есть ли проблема; если есть проблема, он сразу сообщит об ошибке~
первый пример
На официальном сайте есть пример, который используется напрямую:
import tensorflow as tf
hello = tf.constant("Hello,TensorFlow")
#创建了图,里面放入hello,TensorFlow
sess = tf.Session()
#定义了一个会话
print(sess.run(hello))
#执行图计算
a = tf.constant(10)
b = tf.constant(32)
#创建了图,里面放两个节点,两个Constant()ops
print(sess.run(a+b))
#执行图计算,此处是相加
результат операции:
2018-06-14 18:48:55.967672: I T:\src\github\tensorflow\tensorflow\core\platform\cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
b'Hello,TensorFlow'
42
Первая строка выше по-прежнему красного цвета, хотя это не влияет на вывод результата, но выглядит это не очень хорошо;
Как это сделать? Просто заблокируй~
import os
os.environ["TF_CPP_MIN_LOG_LEVEL"]='2'
import os, добавьте приведенное выше предложение; не знаете, что оно означает? приходи, приходи~
os.environ["TF_CPP_MIN_LOG_LEVEL"]='1' # 这是默认的显示等级,显示所有信息
os.environ["TF_CPP_MIN_LOG_LEVEL"]='2' # 只显示 warning 和 Error
os.environ["TF_CPP_MIN_LOG_LEVEL"]='3' # 只显示 Error
Прочитав приведенный выше пример, я не вижу ничего особенного.Давайте сначала разберемся с базовыми знаниями~
основное использование
Нужно понять как в TensorFlow:
- Процесс расчета представлен в виде графика;
- Выполнение расчетов графа через сеансы;
- Представляйте данные как тензоры;
- Используйте переменные для хранения информации о состоянии;
- Используйте потоки и выборки для заполнения данных и получения результатов произвольных операций соответственно;
Основные понятия TensorFlow
- График (Graph): Используется для представления вычислительных задач, то есть некоторых операций, которые мы должны выполнить.
- Сеанс: когда сеанс установлен, будет сгенерирован пустой граф; узлы и ребра добавляются к сеансу для формирования графа. Сеанс может иметь несколько графов, и результаты получаются путем выполнения этих графов. Если вы думаете о каждом графике как о токарном станке, сеанс представляет собой семинар с несколькими токарными станками, используемыми для преобразования данных в результаты.
- Тензор: используется для представления данных, это наш исходный материал.
- Переменная (Variable): используется для записи некоторых данных и состояния, это наш контейнер.
- подача и выборка: вы можете присваивать значения или извлекать данные из произвольных операций. Эквивалентно некоторым лопатам, вы можете манипулировать данными.
Метафора изображения такова: думайте о сеансе как о мастерской, а о графике как о токарном станке, который использует Tensor в качестве сырья, переменные в качестве контейнера, подачу и выборку в качестве лопаты, а данные перерабатываются в наши результаты. .
вычисление графа
Создание графиков в программе TensorFlow похоже на [фазу построения],
На [этапе выполнения] сеанс используется для выполнения узлов в графе.
Очень часто бывает,Создается граф для представления и обучения нейронной сети на [этапе построения], а последовательность операций обучения повторяется на графе на [этапе выполнения].
Создание и запуск графиков
В первом примере показано, как создается график, вот еще один пример:
matrix1 = tf.constant([[3.,3.]])
matrix2 = tf.constant([[2.],[2.]])
product = tf.matmul(matrix1,matrix2)
#创建一个矩阵乘法
#默认的图,有3个节点,两个constant和一个matmul
sess = tf.Session()
#定义一个会话
result = sess.run(product)
#运算乘法,得到结果
print(result)
sess.close()
#关闭会话
Если необходимо использовать GPU, он обрабатывается следующим образом:
with tf.Session() as sess:
with tf.device("/cpu:0"):
matrix1 = tf.constant([[3,3]])
#这是一行2列
matrix2 = tf.constant([[2],[2]])
#这个是两行1列
product = tf.matmul(matrix1,matrix2)
#创建一个矩阵乘法
#默认的图,有3个节点,两个constant和一个matmul
sess = tf.Session()
#定义一个会话
result = sess.run(product)
#运算乘法,得到结果
print(result)
sess.close()
#关闭会话
Значения каждой строки в device следующие:
- "/cpu:0": процессор вашей машины;
- "/gpu:0": первый GPU вашей машины;
- "/gpu:1": второй GPU вашей машины;
постоянный
tf.constant(value, dtype=None, shape=None, name='Const', verify_shape=False), значение — значение, тип dtype, shape — тензорная форма, имя name, verify_shape по умолчанию False, эти элементы являются необязательными. Действие создает константу.
a = tf.constant(2, name="a") # print(a) = 2
b = tf.constant(2.0, dtype=tf.float32, shape=[2,2], name="b") # 2x2矩阵,值为2
c = tf.constant([[1, 2], [3, 4]], name="c") # 2x2矩阵,值1,2,3,4
Вы растеряны? Все в порядке, просто оставьте это, чтобы повлиять на это ~
Второй пример - создать переменную
num = tf.Variable(0,name = "count")
#创建一个变量num
new_value = tf.add(num,10)
#创建一个加法操作,把当前的数字+10
op = tf.assign(num,new_value)
#创建一个赋值操作,把new_value赋值给num
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
#初始化变量
print(sess.run(num))
for i in range(5):
#创建一个for循环,循环5次
sess.run(op)
#执行op的赋值操作
print(sess.run(num))
#输出num
输出的结果:
0
10
20
30
40
50
Третий пример - заполнение
Иногда переменная не присваивается при объявлении, а присваивается при вычислении, в этом случае фид пригодится.
input1 = tf.placeholder(tf.float32)
#创建一个变量占位符input1
input2 = tf.placeholder(tf.float32)
#创建一个变量占位符input2
mul = tf.multiply(input1, input2)
#乘法操作
with tf.Session() as sess:
result = sess.run([mul], feed_dict={input1:[7.], input2:[2.]})
#在运算时,用feed设置两个输入的值
print(result)
Комплексный пример
import tensorflow as tf
import os
os.environ["TF_CPP_MIN_LOG_LEVEL"]='2'
import numpy as np
x_data = np.random.rand(100).astype("float32")
y_data = x_data * 0.1 + 0.3
# 模拟生成100对数据对, 对应的函数为y = x * 0.1 + 0.3
# numpy是Python的一个科学计算库,提供矩阵运算的功能
# astype是转换数组的数据类型
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b = tf.Variable(tf.zeros([1]))
#产生尺寸为1的张量
y = W * x_data + b
# 指定w和b变量的取值范围(注意我们要利用TensorFlow来得到w和b的值)
# tf.random_uniform,TensorFlow随机值函数,返回1矩阵,数值产生于-1.0跟1.0之间
loss = tf.reduce_mean(tf.square(y - y_data))
#reduce_mean求平均值
#square是对里面的值求平方操作
optimizer = tf.train.GradientDescentOptimizer(0.5)
#这个类是实现梯度下降算法的优化器,第一个参数是要使用的学习率
train = optimizer.minimize(loss)
# 最小化均方误差
init = tf.global_variables_initializer()
# 初始化TensorFlow参数
sess = tf.Session()
sess.run(init)
# 运行数据流图(注意在这一步才开始执行计算过程)
for step in range(201):
sess.run(train)
if step % 20 == 0:
print(step, sess.run(W), sess.run(b))
# 观察多次迭代计算时,w和b的拟合值
# 最好的情况是w和b分别接近甚至等于0.1和0.3
Результат вывода:
0 [-0.39065683] [0.66207296]
20 [-0.0082044] [0.3498935]
40 [0.07841039] [0.30995506]
60 [0.09569232] [0.3019863]
80 [0.09914052] [0.30039632]
100 [0.09982852] [0.30007908]
120 [0.09996579] [0.30001578]
140 [0.09999318] [0.30000314]
160 [0.09999864] [0.30000064]
180 [0.09999974] [0.30000013]
200 [0.09999995] [0.30000004]
Данные выводятся каждые 20 раз.Как видно из приведенных выше результатов, по мере увеличения количества раз значения w и b все ближе и ближе к 0,1 и 0,3;
JB любопытно, почему это происходит? Из приведенного выше кода ничего не делает? что насчет этого? Предполагается, что вы увидите исходный код TensorFlow.Если вам интересно, не забудьте поделиться им после прочтения~
Вот и все для этой главы. Изначально я хотел представить привет, мир, но, учитывая, что общая глава будет относительно длинной, давайте отложим ее~
резюме
Давайте сделаем обычное резюме. В этой статье в основном объясняются связанные концепции искусственного интеллекта и базовое использование TensorFlow. Она также объединяет пример, чтобы доказать эффект TensorFlow. Что касается исходного кода, JB не понимает его, но он чувствует, что TensorFlow великолепен~
И наша конечная цель — использовать TensorFlow для обучения нашей собственной модели, чтобы повысить скорость распознавания графических кодов проверки;
Спасибо всем~