Программа = Структура данных + Алгоритм.
Программа TensorFlow = Тензорная структура данных + Язык алгоритмов в виде графа вычислений.
Тензоры и графы вычислений являются основными понятиями TensorFlow.
Основной структурой данных в TensorFlow является тензор (Tensor). Тензор — это многомерный массив. Тензоры в TensorFlow похожи на массивы в numpy.
По поведению тензоры делятся на два типа: константы (constant) и переменные (Variable).
Значения констант не могут быть переназначены в графе вычислений, а переменным можно присвоить новые значения с помощью операторов, таких как assign, в графе вычислений.
Типы данных тензоров соответствуют 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
False
Различные типы данных могут быть представлены тензорами разной размерности (rank).
Скаляр — это 0-мерный тензор, вектор — 1-мерный тензор, матрица — 2-мерный тензор.
Цветное изображение имеет три канала RGB и может быть представлено как 3-мерный тензор. Видео также имеет временную ось и может быть представлено как 4-мерный тензор. Можно просто сказать, что количество скобок равно количеству измерений тензора.
scalar = tf.constant(True) #скаляр, 0-мерный тензор
print(tf.rank(scalar))
print(scalar.numpy().ndim) # tf.rank работает так же, как метод numpy ndim
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.
Можно преобразовать тензор TensorFlow в тензор 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"你好 世界")
print(u.numpy())
print(u.numpy().decode("utf-8"))
b'\xe4\xbd\xa0\xe5\xa5\xbd \xe4\xb8\x96\xe7\x95\x8c'
你好 世界
В моделях параметры, которые необходимо обучить, обычно устанавливаются как переменные.
# Значение константы не может быть изменено, повторное присвоение константе равносильно созданию нового пространства памяти
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
# Значения переменных могут быть изменены, вы можете переназначить переменные с помощью assign, assign_add и других методов
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
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )