1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/Python_Ai_Road-eat_tensorflow2_in_30_days

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Chapter2-1.md 6 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 03.12.2024 15:14 374a95e

2-1 Структура данных

Program = Структура данных + Алгоритм

TensorFlow Program = Структура данных Tensor + Алгоритм в графе

Тензор и граф — ключевые понятия TensorFlow.

Основная структура данных в TensorFlow — это тензор, который представляет собой многомерный массив. Тензор похож на array в numpy.

Есть два типа тензоров в зависимости от поведения: константа и переменная.

Значение константы не может быть переназначено на графе, в то время как переменной можно переназначить через такие операторы, как assign.

1. Константный тензор

Тип данных тензора в основном соответствует numpy.array.

import numpy as np
import tensorflow as tf

i = tf.constant(1) # tf.int32 тип константы
l = tf.constant(1,dtype = tf.int64) # tf.int64 тип константы
f = tf.constant(1.23) #tf.float32 тип константы
d = tf.constant(3.14,dtype = tf.double) # tf.double тип константы
s = tf.constant("hello world") # tf.string тип константы
b = tf.constant(True) #tf.bool тип константы


print(tf.int64 == np.int64) 
print(tf.bool == np.bool)
print(tf.double == np.float64)
print(tf.string == np.unicode) # tf.string тип не равен np.unicode типу
True
True
True
False

Каждый тип данных может быть представлен тензором разного ранга.

Скаляры — это тензоры с рангом = 0, массивы — с рангом = 1, матрицы — с рангом = 2.

Красочное изображение имеет три канала (RGB), которые могут быть представлены как тензор с рангом = 3.

Для видео существует временное измерение, поэтому его можно представить как тензор 4 ранга.

Интуитивный способ понять: количество квадратных скобок равно рангу тензора.

scalar = tf.constant(True)  #Скаляр — это тензор ранга 0

print(tf.rank(scalar))
print(scalar.numpy().ndim)  # tf.rank равен функции ndim в numpy
tf.Tensor(0, shape=(), dtype=int32)
0
vector = tf.constant([1.0,2.0,3.0,4.0]) #Вектор — это тензор ранга 1

print(tf.rank(vector))
print(np.ndim(vector.numpy()))
tf.Tensor(1, shape=(), dtype=int32)
1
matrix = tf.constant([[1.0,2.0],[3.0,4.0]]) #Матрица — это тензор ранга 2

print(tf.rank(matrix).numpy())
print(np.ndim(matrix))
2
2
tensor3 = tf.constant([[[1.0,2.0],[3.0,4.0]],[[5.0,6.0],[7.0,8.0]]])  # Тензор ранга 3
print(tensor3)
print(tf.rank(tensor3))
tf.Tensor(
[[[1. 2.]
  [3. 4.]]

 [[5. 6.]
  [7. 8.]]], shape=(2, 2, 2), dtype=float32)
tf.Tensor(3, shape=(), dtype=int32)
tensor4 = tf.constant([[[[1.0,1.0],[2.0,2.0]],[[3.0,3.0],[4.0,4.0]]],
                        [[[5.0,5.0],[6.0,6.0]],[[7.0,7.0],[8.0,8.0]]]])  # Тензор ранга 4
print(tensor4)
print(tf.rank(tensor4))
tf.Tensor(
[[[[1. 1.]
   [2. 2.]]

  [[3. 3.]
   [4. 4.]]]


 [[[5. 5.]
   [6. 6.]]

  [[7. 7.]
   [8. 8.]]]], shape=(2, 2, 2, 2), dtype=float32)
tf.Tensor(4, shape=(), dtype=int32)

Мы используем tf.cast для изменения типа данных тензоров.

Метод numpy() предназначен для преобразования типа данных из тензора в массив numpy.

Метод shape предназначен для проверки размера тензора.

h = tf.constant([123,456],dtype = tf.int32)
f = tf.cast(h,tf.float32)
print(h.dtype, f.dtype)
<dtype: 'int32'> <dtype: 'float32'>
y = tf.constant([[1.0,2.0],[3.0,4.0]])
print(y.numpy()) #Преобразовать в np.array
print(y.shape)
[[1. 2.]
 [3. 4.]]
(2, 2)
u = tf.constant(u"Hello World")
print(u.numpy())  
print(u.numpy().decode("utf-8"))
b'\xe4\xbd\xa0\xe5\xa5\xbd \xe4\xb8\x96\xe7\x95\x8c'
Hello World

2. Переменный тензор

Обучаемые параметры в моделях обычно определяются как переменные.

# Значение константы НЕ изменяется. Переназначение создаёт новое пространство в памяти.
c = tf.constant([1.0,2.0])
print(c)
print(id(c))
c = c + tf.constant([1.0,1.0])
print(c)
print(id(c))
tf.Tensor([1. 2.], shape=(2,), dtype=float32)
5276289568
tf.Tensor([2. 3.], shape=(2,), dtype=float32)
5276290240
``` ```
v = tf.Variable([1.0,2.0],name = "v")
print(v)
print(id(v))
v.assign_add([1.0,1.0])
print(v)
print(id(v))
<tf.Variable 'v:0' shape=(2,) dtype=float32, numpy=array([1., 2.], dtype=float32)>
5276259888
<tf.Variable 'v:0' shape=(2,) dtype=float32, numpy=array([2., 3.], dtype=float32)>
5276259888

Пожалуйста, оставляйте комментарии в официальном аккаунте WeChat «Python与算法之美» (Elegance of Python and Algorithms), если хотите пообщаться с автором о содержании. Автор постарается ответить, учитывая ограниченное время.

Также приглашаем присоединиться к групповому чату с другими читателями, ответив 加群 (join group) в официальном аккаунте WeChat.

image.png

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/Python_Ai_Road-eat_tensorflow2_in_30_days.git
git@api.gitlife.ru:oschina-mirror/Python_Ai_Road-eat_tensorflow2_in_30_days.git
oschina-mirror
Python_Ai_Road-eat_tensorflow2_in_30_days
Python_Ai_Road-eat_tensorflow2_in_30_days
master