Основе ТенсорФлов-а: Тенсор, Схапе, Типе, Сессионс & амп; Оператори

Преглед садржаја:

Anonim

Шта је тензор?

Име Тенсорфлов-а је директно изведено из његовог основног оквира: Тенсор. У Тенсорфлов-у сва израчунавања укључују тензоре. Тензор је вектор или матрица н-димензија која представља све врсте података. Све вредности у тензору садрже идентичан тип података са познатим (или делимично познатим) обликом. Облик података је димензионалност матрице или низа.

Тензор може настати из улазних података или резултата прорачуна. У ТенсорФлов-у све операције се изводе унутар графикона. Графикон је скуп израчунавања који се одвија сукцесивно. Свака операција назива се оп чвор и они су међусобно повезани.

Графикон даје преглед операција и веза између чворова. Међутим, не приказује вредности. Руб чворова је тензор, тј. Начин да се операција попуни подацима.

У машинском учењу, модели су феед са листом објеката који се називају вектори карактеристика. Вектор обележја може бити било које врсте података. Вектор карактеристика обично ће бити примарни улаз за попуњавање тензора. Ове вредности ће се преточити у оп чвор кроз тензор и резултат ове операције / израчунавања створиће нови тензор који ће се заузврат користити у новој операцији. Све ове операције се могу видети на графикону.

У овом упутству научићете основе ТенсорФлов-а попут-

  • Шта је тензор?
  • Представљање тензора
  • Врсте тензора
  • Направите тензор н-димензије
  • Облик тензора
  • Тип података
  • Израда оператора
  • Неки корисни оператери ТенсорФлов
  • Променљиве
  • Резервисано место
  • Седница
  • Графикон

Представљање тензора

У ТенсорФлов-у, тензор је колекција вектора карактеристика (тј. Низа) н-димензија. На пример, ако имамо 2к3 матрицу са вредностима од 1 до 6, пишемо:

Представљање тензора

ТенсорФлов представља ову матрицу као:

[[1, 2, 3],[4, 5, 6]] 

Ако креирамо тродимензионалну матрицу са вредностима од 1 до 8, имамо:

ТенсорФлов представља ову матрицу као:

[ [[1, 2],[[3, 4],[[5, 6],[[7,8] ] 

Напомена: Тензор се може представити скаларом или може имати облик већи од три димензије. Једноставније је визуализирати виши ниво димензија.

Врсте тензора

У ТенсорФлов-у сва израчунавања пролазе кроз један или више тензора. Тф.тенсор је објекат са три својства:

  • Јединствена ознака (име)
  • Димензија (облик)
  • Тип података (дтипе)

Свака операција коју ћете обавити са ТенсорФлов-ом укључује манипулацију тензором. Постоје четири главна типа тензора које можете створити:

  • тф.Промена
  • тф.константан
  • тф.плацехолдер
  • тф.СпарсеТенсор

У овом упутству ћете научити како створити тф.цонстант и тф.Вариабле.

Пре него што прођемо кроз водич, обавезно активирајте цонда окружење помоћу ТенсорФлов-а. Назвали смо ово окружење здраво-тф.

За кориснике МацОС-а:

source activate hello-tf 

За кориснике Виндовс-а:

activate hello-tf 

Након што то учините, спремни сте за увоз тенсорфлов-а

# Import tfimport tensorflow as tf 

Направите тензор н-димензије

Почињете са стварањем тензора са једном димензијом, наиме скаларом.

Да бисте креирали тензор, можете користити тф.цонстант () као што је приказано у доњем примеру облика тензора ТенсорФлов:

tf.constant(value, dtype, name = "")arguments- `value`: Value of n dimension to define the tensor. Optional- `dtype`: Define the type of data:- `tf.string`: String variable- `tf.float32`: Float variable- `tf.int16`: Integer variable- "name": Name of the tensor. Optional. By default, `Const_1:0` 

Да бисте креирали тензор димензије 0, покрените следећи код

## rank 0# Default namer1 = tf.constant(1, tf.int16)print(r1)

Оутпут

Tensor("Const:0", shape=(), dtype=int16) 

# Named my_scalarr2 = tf.constant(1, tf.int16, name = "my_scalar")print(r2) 

Оутпут

Tensor("my_scalar:0", shape=(), dtype=int16) 

Сваки тензор се приказује именом тензора. Сваки објект тензора дефинисан је атрибутима тензора попут јединствене ознаке (име), димензије (облика) и типова података ТенсорФлов (дтипе).

Тензор можете дефинисати децималним вредностима или низом променом типа података.

# Decimalr1_decimal = tf.constant(1.12345, tf.float32)print(r1_decimal)# Stringr1_string = tf.constant("Guru99", tf.string)print(r1_string) 

Оутпут

Tensor("Const_1:0", shape=(), dtype=float32)Tensor("Const_2:0", shape=(), dtype=string) 

Тензор димензије 1 може се створити на следећи начин:

## Rank 1r1_vector = tf.constant([1,3,5], tf.int16)print(r1_vector)r2_boolean = tf.constant([True, True, False], tf.bool)print(r2_boolean) 

Оутпут

Tensor("Const_3:0", shape=(3,), dtype=int16)Tensor("Const_4:0", shape=(3,), dtype=bool) 

Можете приметити да се облик ТенсорФлов састоји само од 1 колоне.

Да бисте креирали низ од две димензије тензора, потребно је да затворите заграде након сваког реда. У наставку погледајте пример облика Керас тензора

## Rank 2r2_matrix = tf.constant([ [1, 2],[3, 4] ],tf.int16)print(r2_matrix) 

Оутпут

Tensor("Const_5:0", shape=(2, 2), dtype=int16) 

Матрица има 2 реда и 2 колоне испуњене вредностима 1, 2, 3, 4.

Матрица са 3 димензије се конструише додавањем још једног нивоа са заградама.

## Rank 3r3_matrix = tf.constant([ [[1, 2],[3, 4],[5, 6]] ], tf.int16)print(r3_matrix) 

Оутпут

Tensor("Const_6:0", shape=(1, 3, 2), dtype=int16) 

Матрица изгледа као слика две.

Облик тензора

Када штампате тензор, ТенсорФлов погађа облик. Међутим, облик тензора можете добити помоћу својства облика ТенсорФлов.

Испод конструишете матрицу испуњену бројем од 10 до 15 и проверавате облик м_схапе

# Shape of tensorm_shape = tf.constant([ [10, 11],[12, 13],[14, 15] ])m_shape.shape 

Оутпут

TensorShape([Dimension(3), Dimension(2)]) 

Матрица има 3 реда и 2 колоне.

ТенсорФлов има корисне наредбе за креирање вектора или матрице испуњене са 0 или 1. На пример, ако желите да креирате 1-Д тензор одређеног облика 10, испуњен са 0, можете покренути доњи код:

# Create a vector of 0print(tf.zeros(10)) 

Оутпут

Tensor("zeros:0", shape=(10,), dtype=float32) 

Својство ради и за матрицу. Овде креирате матрицу 10к10 испуњену с 1

# Create a vector of 1print(tf.ones([10, 10])) 

Оутпут

Tensor("ones:0", shape=(10, 10), dtype=float32) 

Можете да користите облик дате матрице да бисте направили вектор јединица. Матрица м_схапе је димензија 3к2. Можете да направите тензор са 3 реда које један испуњава следећим кодом:

# Create a vector of ones with the same number of rows as m_shapeprint(tf.ones(m_shape.shape[0])) 

Оутпут

Tensor("ones_1:0", shape=(3,), dtype=float32) 

Ако у заграду проследите вредност 1, можете да конструишете вектор јединица једнак броју колона у матрици м_схапе.

# Create a vector of ones with the same number of column as m_shapeprint(tf.ones(m_shape.shape[1])) 

Оутпут

Tensor("ones_2:0", shape=(2,), dtype=float32) 

Коначно, можете створити матрицу 3к2 само са једном

print(tf.ones(m_shape.shape)) 

Оутпут

Tensor("ones_3:0", shape=(3, 2), dtype=float32) 

Тип података

Друго својство тензора је врста података. Тензор истовремено може имати само једну врсту података. Тензор може имати само једну врсту података. Тип можете вратити са својством дтипе.

print(m_shape.dtype) 

Оутпут

 

У неким приликама желите да промените врсту података. У ТенсорФлов-у је то могуће методом тф.цаст.

Пример

Испод се плутајући тензор претвара у цео број користећи употребу методе цаст.

# Change type of datatype_float = tf.constant(3.123456789, tf.float32)type_int = tf.cast(type_float, dtype=tf.int32)print(type_float.dtype)print(type_int.dtype) 

Оутпут


 

ТенсорФлов аутоматски бира врсту података када аргумент није наведен током креирања тензора. ТенсорФлов ће погодити које су врсте података највероватније. На пример, ако проследите текст, он ће претпоставити да је то низ и претворити га у низ.

Израда оператора

Неки корисни оператери ТенсорФлов

Знате како да направите тензор помоћу ТенсорФлов-а. Време је да научите како се изводе математичке операције.

ТенсорФлов садржи све основне операције. Можете почети са једноставним. За израчунавање квадрата броја користићете методу ТенсорФлов. Ова операција је једноставна јер је за конструкцију тензора потребан само један аргумент.

Квадрат броја је конструисан са тф.скрт (к) са к као плутајућим бројем.

x = tf.constant([2.0], dtype = tf.float32)print(tf.sqrt(x)) 

Оутпут

Tensor("Sqrt:0", shape=(1,), dtype=float32) 

Напомена: Излаз је вратио објект тензора, а не резултат квадрата 2. У примеру исписујете дефиницију тензора, а не стварну процену операције. У следећем одељку ћете научити како ТенсорФлов ради на извршавању операција.

Следи листа најчешће коришћених операција. Идеја је иста. Свака операција захтева један или више аргумената.

  • тф.адд (а, б)
  • тф.извод (а, б)
  • тф.множити (а, б)
  • тф.див (а, б)
  • тф.пов (а, б)
  • тф.екп (а)
  • тф.скрт (а)

Пример

# Addtensor_a = tf.constant([[1,2]], dtype = tf.int32)tensor_b = tf.constant([[3, 4]], dtype = tf.int32)tensor_add = tf.add(tensor_a, tensor_b)print(tensor_add) 

Оутпут

Tensor("Add:0", shape=(1, 2), dtype=int32) 

Објашњење кода

Направите два тензора:

  • један тензор са 1 и 2
  • један тензор са 3 и 4

Збројите оба тензора.

Обавештење : да оба тензора морају имати исти облик. Можете извршити множење преко два тензора.

# Multiplytensor_multiply = tf.multiply(tensor_a, tensor_b)print(tensor_multiply) 

Оутпут

Tensor("Mul:0", shape=(1, 2), dtype=int32) 

Променљиве

До сада сте створили само сталне тензоре. Није од велике користи. Подаци увек стижу са различитим вредностима, да бисте то ухватили, можете користити класу Вариабле. Представљаће чвор где се вредности увек мењају.

Да бисте креирали променљиву, можете користити методу тф.гет_вариабле ()

tf.get_variable(name = "", values, dtype, initializer)argument- `name = ""`: Name of the variable- `values`: Dimension of the tensor- `dtype`: Type of data. Optional- `initializer`: How to initialize the tensor. OptionalIf initializer is specified, there is no need to include the `values` as the shape of `initializer` is used. 

На пример, код у наставку ствара дводимензионалну променљиву са две случајне вредности. Подразумевано, ТенсорФлов враћа случајну вредност. Променљивој дајете име вар

# Create a Variable## Create 2 Randomized valuesvar = tf.get_variable("var", [1, 2])print(var.shape) 

Оутпут

(1, 2) 

У другом примеру креирате променљиву са једним редом и две колоне. Треба да користите [1,2] да бисте креирали димензију променљиве

Иницијалне вредности овог тензора су једнаке нули. На пример, када тренирате модел, морате да имате почетне вредности да бисте израчунали тежину карактеристика. Испод сте поставили ове почетне вредности на нулу.

var_init_1 = tf.get_variable("var_init_1", [1, 2], dtype=tf.int32, initializer=tf.zeros_initializer)print(var_init_1.shape) 

Оутпут

(1, 2) 

Вредности константе тензора можете проследити у променљиву. Створите константни тензор методом тф.цонстант (). Користите овај тензор за иницијализацију променљиве.

Прве вредности променљиве су 10, 20, 30 и 40. Нови тензор имаће облик 2к2.

# Create a 2x2 matrixtensor_const = tf.constant([[10, 20],[30, 40]])# Initialize the first value of the tensor equals to tensor_constvar_init_2 = tf.get_variable("var_init_2", dtype=tf.int32, initializer=tensor_const)print(var_init_2.shape) 

Оутпут

(2, 2) 

Резервисано место

Резервисано место има сврху да храни тензор. Резервисано место се користи за иницијализацију података како би текли унутар тензора. Да бисте унели резервирано место, морате да користите методу феед_дицт. Резервисано место ће се хранити само у оквиру сесије.

У следећем примеру видећете како да креирате резервирано место методом тф.плацехолдер. У следећој сесији научићете да храните резервирано место стварном вредношћу тензора.

Синтакса је:

tf.placeholder(dtype,shape=None,name=None )arguments:- `dtype`: Type of data- `shape`: dimension of the placeholder. Optional. By default, shape of the data- `name`: Name of the placeholder. Optionaldata_placeholder_a = tf.placeholder(tf.float32, name = "data_placeholder_a")print(data_placeholder_a) 

Оутпут

Tensor("data_placeholder_a:0", dtype=float32) 

Седница

ТенсорФлов ради око 3 главне компоненте:

  • Графикон
  • Тензор
  • Седница
Компоненте Десцритптион

Графикон

Графикон је основни у ТенсорФлов-у. Све математичке операције (опс) изводе се унутар графикона. Можете замислити графикон као пројекат где се обављају све операције. Чворови представљају ове операције, они могу апсорбовати или створити нове тензоре.

Тензор

Тензор представља податке о напретку између операција. Раније сте видели како се иницијализује тензор. Разлика између константе и променљиве је у томе што ће се почетне вредности променљиве променити током времена.

Седница

Сесија ће извршити операцију из графикона. Да бисте напунили графикон вредностима тензора, морате отворити сесију. Унутар сесије морате покренути оператора да бисте креирали излаз.

Графикони и сесије су независни. Можете покренути сесију и добити вредности које ћете касније користити за даља израчунавања.

У доњем примеру ћете:

  • Створите два тензора
  • Направите операцију
  • Отворите сесију
  • Одштампајте резултат

Корак 1) Креирате два тензора к и и

## Create, run and evaluate a sessionx = tf.constant([2])y = tf.constant([4]) 

Корак 2) Оператор креирате множењем к и и

## Create operatormultiply = tf.multiply(x, y) 

Корак 3) Отварате сесију. Сва израчунавања ће се извршити у оквиру сесије. Када завршите, морате да затворите сесију.

## Create a session to run the codesess = tf.Session()result_1 = sess.run(multiply)print(result_1)sess.close() 

Оутпут

[8] 

Објашњење кода

  • тф.Сессион (): Отворите сесију. Све операције ће тећи у оквиру сесија
  • покрени (множи): изврши операцију креирану у кораку 2.
  • испис (резултат_1): Коначно, можете исписати резултат
  • цлосе (): Затворите сесију

Резултат показује 8, што је множење к и и.

Други начин за стварање сесије је унутар блока. Предност је што аутоматски затвара сесију.

with tf.Session() as sess:result_2 = multiply.eval()print(result_2) 

Оутпут

[8] 

У контексту сесије, можете користити методу евал () да извршите операцију. Еквивалентно је покретању (). То чини код читљивијим.

Можете да креирате сесију и видите вредности унутар тензора које сте до сада креирали.

## Check the tensors created beforesess = tf.Session()print(sess.run(r1))print(sess.run(r2_matrix))print(sess.run(r3_matrix)) 

Оутпут

1[[1 2][3 4]][[[1 2][3 4][5 6]]] 

Променљиве су подразумевано празне, чак и након што направите тензор. Морате да иницијализујете променљиву ако желите да је користите. Објекат тф.глобал_вариаблес_инитиализер () треба позвати да би се иницијализовале вредности променљиве. Овај објекат ће експлицитно иницијализовати све променљиве. Ово је корисно пре него што обучите модел.

Можете да проверите вредности променљивих које сте раније креирали. Имајте на уму да морате да користите рун за процену тензора

sess.run(tf.global_variables_initializer())print(sess.run(var))print(sess.run(var_init_1))print(sess.run(var_init_2)) 

Оутпут

[[-0.05356491 0.75867283]][[0 0]][[10 20][30 40]] 

Можете користити резервирано место које сте раније креирали и хранити га стварном вредношћу. Морате проследити податке у методу феед_дицт.

На пример, узећете снагу 2 резервног места дата_плацехолдер_а.

import numpy as nppower_a = tf.pow(data_placeholder_a, 2)with tf.Session() as sess:data = np.random.rand(1, 10)print(sess.run(power_a, feed_dict={data_placeholder_a: data})) # Will succeed. 

Објашњење кода

  • импорт нумпи ас нп: Увезите нумпи библиотеку да бисте креирали податке
  • тф.пов (дата_плацехолдер_а, 2): Креирајте оперативни систем
  • нп.рандом.ранд (1, 10): Креира случајни низ података
  • феед_дицт = {дата_плацехолдер_а: дата}: Напуните резервирано место подацима

Оутпут

[[0.05478134 0.27213147 0.8803037 0.0398424 0.21172127 0.01444725 0.02584014 0.3763949 0.66022706 0.7565559 ]] 

Графикон

ТенсорФлов зависи од генијалног приступа за приказивање операције. Сви прорачуни су представљени шемом протока података. Графикон протока података развијен је да би се утврдила зависност података између појединих операција. Математичка формула или алгоритам направљени су од низа узастопних операција. Графикон је прикладан начин за визуелно приказивање координације прорачуна.

Графикон приказује чвор и ивицу . Чвор је приказ операције, односно јединице рачунања. Ивица је тензор, може произвести нови тензор или потрошити улазне податке. Зависи од зависности између појединих операција.

Структура графикона повезује операције (тј. Чворове) и начин на који су то операције. Имајте на уму да графикон не приказује резултат операција, он само помаже да се визуализује веза између појединих операција.

Да видимо пример.

Замислите да желите да процените следећу функцију:

ТенсорФлов ће створити графикон за извршавање функције. Графикон изгледа овако:

Пример графа ТенсорФлов

Можете лако видети пут којим ће тензори ићи до крајњег одредишта.

На пример, можете видети да се операција додавања не може извршити пре и. Графикон објашњава да ће:

  1. израчунати и:
  2. сабрати 1) заједно
  3. додај у 2)
  4. додати 3) у
x = tf.get_variable("x", dtype=tf.int32, initializer=tf.constant([5]))z = tf.get_variable("z", dtype=tf.int32, initializer=tf.constant([6]))c = tf.constant([5], name = "constant")square = tf.constant([2], name = "square")f = tf.multiply(x, z) + tf.pow(x, square) + z + c 

Објашњење кода

  • к: Иницијализујте променљиву звану к са константном вредношћу 5
  • з: Иницијализујте променљиву звану константном вредношћу 6
  • ц: Иницијализујте константни тензор зван ц са константном вредношћу 5
  • квадрат: Иницирајте константни тензор који се назива квадрат са константном вредношћу 2
  • ф: Конструисати оператора

У овом примеру смо одлучили да вредности променљивих буду фиксне. Такође смо креирали константни тензор назван ц који је константни параметар у функцији ф. Потребна је фиксна вредност 5. На графикону овај параметар можете видети у тензору који се назива константа.

Такође смо конструисали константни тензор снаге у оператеру тф.пов (). Није потребно. Учинили смо то тако да на графикону видите назив тензора. То је круг који се назива квадрат.

Из графикона можете разумети шта ће се десити са тензорима и како може да добије излаз од 66.

Доњи код процењује функцију у сесији.

init = tf.global_variables_initializer() # prepare to initialize all variableswith tf.Session() as sess:init.run() # Initialize x and yfunction_result = f.eval()print(function_result) 

Оутпут

[66] 

Резиме

ТенсорФлов делује око:

  • Графикон : Рачунско окружење које садржи операције и тензоре
  • Тензори : Представља податке (или вредност) који ће тећи на графикону. То је ивица на графикону
  • Сесије : Омогућите извршавање операција

Створите константни тензор

константан објект

Д0

тф.цонстант (1, тф.инт16)

Д1

тф.цонстант ([1,3,5], тф.инт16)

Д2

тф.цонстант ([[1, 2], [3, 4]], тф.инт16)

Д3

тф.цонстант ([[[1, 2], [3, 4], [5, 6]]], тф.инт16)

Направите оператора

Направите оператора Предмет

а + б

тф.адд (а, б)

а * б

тф.множити (а, б)

Направите променљиви тензор

Направите променљиву

објект

случајна вредност

тф.гет_вариабле ("вар", [1, 2])

иницијализована прва вредност

тф.гет_вариабле ("вар_инит_2", дтипе = тф.инт32, иницијализатор = [[1, 2], [3, 4]])

Отворите сесију

Седница објект

Направите сесију

тф.Сессион ()

Покрени сесију

тф.Сессион.рун ()

Процените тензор

променљиво_име.евал ()

Затворите сесију

сесс.цлосе ()

Сједница по блоку

са тф.Сессион () као сесс: