Бүтээгдэхүүн Overview
- үндсэн
- Shapes тухай
- Үнэлгээ
- Манипулятор хэлбэр
- Дэлгэрэнгүй DTypes
- Байгалийн
- тв.convert_to_tensor
- Өргөтгөх Tensors
- Дамжуулагч
- Татаж авах Tensors
Тенсорууд нь нэг төрлийн (adtype
) Та бүх дэмжлэг үзнэ үүdtypes
Нөхцөлtf.dtypes
.
Хэрэв та мэдэж байгаа болҮнэлгээ, tensors нь (зүгээр л) шигnp.arrays
.
All tensors are immutable like Python numbers and strings: Та tensor-ийн агуулгыг шинэчилж чадахгүй, зөвхөн шинэ нэг үүсгэх болно.
import tensorflow as tf
import numpy as np
2024-08-15 03:05:18.327501: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:485] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered
2024-08-15 03:05:18.348450: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:8454] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered
2024-08-15 03:05:18.354825: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1452] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered
үндсэн
Эхлээд зарим үндсэн tensors бий болгох.
Энд "scalar" эсвэл "rank-0" tensor юм. A scalar нь нэг үнэ цэнэтэй, ямар ч "аксиуд" агуулдаг.
# This will be an int32 tensor by default; see "dtypes" below.
rank_0_tensor = tf.constant(4)
print(rank_0_tensor)
tf.Tensor(4, shape=(), dtype=int32)
WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
I0000 00:00:1723691120.932442 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691120.936343 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691120.940040 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691120.943264 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691120.954872 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691120.958376 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691120.961894 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691120.964843 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691120.967730 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691120.971300 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691120.974711 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691120.977717 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691122.208679 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691122.210786 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691122.212791 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691122.214776 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691122.216798 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691122.218734 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691122.220650 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691122.222554 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691122.224486 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691122.226429 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691122.228329 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691122.230251 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691122.269036 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691122.271069 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691122.273006 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691122.274956 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691122.276917 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691122.278854 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691122.280754 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691122.282664 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691122.284613 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691122.287058 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691122.289508 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
I0000 00:00:1723691122.291891 176945 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355
"Вектор" эсвэл "Rank-1" tensor нь үнэ цэнэгийн жагсаалттай байдаг. Вектор нь нэг нэхмэл байдаг:
# Let's make this a float tensor.
rank_1_tensor = tf.constant([2.0, 3.0, 4.0])
print(rank_1_tensor)
tf.Tensor([2. 3. 4.], shape=(3,), dtype=float32)
A "matrix" or "rank-2" tensor has two axes:
# If you want to be specific, you can set the dtype (see below) at creation time
rank_2_tensor = tf.constant([[1, 2],
[3, 4],
[5, 6]], dtype=tf.float16)
print(rank_2_tensor)
tf.Tensor(
[[1. 2.]
[3. 4.]
[5. 6.]], shape=(3, 2), dtype=float16)
A scalar, shape: |
A vector, shape: |
A matrix, shape: |
---|---|---|
|
|
|
Tensors may have more axes; here is a tensor with three axes:
# There can be an arbitrary number of
# axes (sometimes called "dimensions")
rank_3_tensor = tf.constant([
[[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]],
[[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]],
[[20, 21, 22, 23, 24],
[25, 26, 27, 28, 29]],])
print(rank_3_tensor)
tf.Tensor(
[[[ 0 1 2 3 4]
[ 5 6 7 8 9]]
[[10 11 12 13 14]
[15 16 17 18 19]]
[[20 21 22 23 24]
[25 26 27 28 29]]], shape=(3, 2, 5), dtype=int32)
Хэрэв та олон арга замаар хоёр гаруй тоостай tensor визуалж болно.
A 3-axis tensor, shape: |
|
|
---|---|---|
|
|
|
Та tensor-ийг NumPy матриц руу конвертоар ашиглаж болноnp.array
эсвэлtensor.numpy
Метод :
np.array(rank_2_tensor)
array([[1., 2.],
[3., 4.],
[5., 6.]], dtype=float16)
rank_2_tensor.numpy()
array([[1., 2.],
[3., 4.],
[5., 6.]], dtype=float16)
Тенсорууд нь ихэвчлэн floats болон incs агуулдаг боловч бусад олон төрлийн байдаг:
- Комплекс тоо
- Зөвлөгөө
үндсэнtf.Tensor
Class-ийн tensors нь "эртний" байхыг шаарддаг --- Энэ нь тусгай тэнгисийн хооронд бүх элемент нь нэг хэмжээтэй юм. Гэсэн хэдий ч, өөр хэлбэрийн ажиллуулах боломжтой tensors-ийн тусгай төрөл байдаг:
- Өнгөрсөн tensors
- Тохируулга Tensors
Та tensors дээр үндсэн математик хийх боломжтой, нь нэмэлт, элемент хэлбэртэй хуваалцах, матрик хуваалцах.
a = tf.constant([[1, 2],
[3, 4]])
b = tf.constant([[1, 1],
[1, 1]]) # Could have also said `tf.ones([2,2], dtype=tf.int32)`
print(tf.add(a, b), "\n")
print(tf.multiply(a, b), "\n")
print(tf.matmul(a, b), "\n")
tf.Tensor(
[[2 3]
[4 5]], shape=(2, 2), dtype=int32)
tf.Tensor(
[[1 2]
[3 4]], shape=(2, 2), dtype=int32)
tf.Tensor(
[[3 3]
[7 7]], shape=(2, 2), dtype=int32)
print(a + b, "\n") # element-wise addition
print(a * b, "\n") # element-wise multiplication
print(a @ b, "\n") # matrix multiplication
tf.Tensor(
[[2 3]
[4 5]], shape=(2, 2), dtype=int32)
tf.Tensor(
[[1 2]
[3 4]], shape=(2, 2), dtype=int32)
tf.Tensor(
[[3 3]
[7 7]], shape=(2, 2), dtype=int32)
Tensors бүх төрлийн үйл ажиллагаа ( эсвэл "Ops") ашиглаж байна.
c = tf.constant([[4.0, 5.0], [10.0, 1.0]])
# Find the largest value
print(tf.reduce_max(c))
# Find the index of the largest value
print(tf.math.argmax(c))
# Compute the softmax
print(tf.nn.softmax(c))
tf.Tensor(10.0, shape=(), dtype=float32)
tf.Tensor([1 0], shape=(2,), dtype=int64)
tf.Tensor(
[[2.6894143e-01 7.3105854e-01]
[9.9987662e-01 1.2339458e-04]], shape=(2, 2), dtype=float32)
Үзүүлэлт: Тавтай морилно уу, TensorFlow функцийг Tensor-ийг эхлэхэд хүсч байгаа бол, функцийг tf.convert_to_tensor ашиглан Tensor-ийг хувиргаж болно ямар ч зүйлнийг хүлээн зөвшөөрч болно. Үзүүлэлт нь доор үзнэ үү.
Note:Жишээ нь, TensorFlow функцийг ямар чTensor
Дараа нь, функц нь ямар ч зүйл нь конвертируулсан болно.Tensor
Бүртгүүлэхtf.convert_to_tensor
. Үзэлт нь доор үзнэ үү.
tf.convert_to_tensor([1,2,3])
<tf.Tensor: shape=(3,), dtype=int32, numpy=array([1, 2, 3], dtype=int32)>
tf.reduce_max([1,2,3])
<tf.Tensor: shape=(), dtype=int32, numpy=3>
tf.reduce_max(np.array([1,2,3]))
<tf.Tensor: shape=(), dtype=int64, numpy=3>
Shapes тухай
Tensors нь хэлбэртэй байдаг. Зарим хэлбэр:
- Загвар: Tensor-ийн тус бүр тэнгисийн урт (эмийн тоо)
- Ранг: Тензор нэрийн тоо. Scalar нь Ранг 0, вектор нь Ранг 1, матриц нь Ранг 2.
- Axis эсвэл Dimension: Tensor-ийн тодорхой хэмжээ.
- Хэмжээ: Тензор дахь зүйлсийн нийт тоо, хэлбэрийн вектор элементүүдийн бүтээгдэхүүний.
Ангилал: Хэрэв та "дөв хэмжээтэй tensor" гэж нэрлэдэг бол, rank-2 tensor нь ихэвчлэн 2D талбайг тодорхойлох биш юм.
Note:Хэрэв та "дүүн хэмжээтэй tensor" гэж нэрлэдэг бол, rank-2 tensor нь ихэвчлэн 2D пространствог тайлбарладаггүй.
Tensors болонtf.TensorShape
Objects нь тэднийг хангахын тулд тохиромжтой шинж чанарыг байна:
rank_4_tensor = tf.zeros([3, 2, 4, 5])
|
A rank-4 tensor, shape: |
---|---|
|
|
print("Type of every element:", rank_4_tensor.dtype)
print("Number of axes:", rank_4_tensor.ndim)
print("Shape of tensor:", rank_4_tensor.shape)
print("Elements along axis 0 of tensor:", rank_4_tensor.shape[0])
print("Elements along the last axis of tensor:", rank_4_tensor.shape[-1])
print("Total number of elements (3*2*4*5): ", tf.size(rank_4_tensor).numpy())
Type of every element: <dtype: 'float32'>
Number of axes: 4
Shape of tensor: (3, 2, 4, 5)
Elements along axis 0 of tensor: 3
Elements along the last axis of tensor: 5
Total number of elements (3*2*4*5): 120
Гэхдээ энэ ньTensor.ndim
НөхцөлTensor.shape
Атрибуты нь үгүйсэгTensor
Objects. Хэрэв таTensor
ашиглахtf.rank
эсвэлtf.shape
Функц. Энэ янз бүрийн нь алдартай боловч энэ нь график үүсгэх үед чухал байж болно (ямар ч).
tf.rank(rank_4_tensor)
<tf.Tensor: shape=(), dtype=int32, numpy=4>
tf.shape(rank_4_tensor)
<tf.Tensor: shape=(4,), dtype=int32, numpy=array([3, 2, 4, 5], dtype=int32)>
Хоёр нь ихэвчлэн тэдний индекс гэж нэрлэдэг боловч, та үргэлж өөрсдийн мэдрэмжийг дагаж байх ёстой. Энэ нь ихэвчлэн оюутнуудыг глобал нь орон нутгийн орно: Барааны оюутнуудын анх, дараа нь орон нутгийн хэмжээ, тус бүр байршил нь онцлог. Энэ арга нь онцлог вектор нь зөөврийн бүсүүд юм.
Typical axis order |
---|
|
Үнэлгээ
Single-axis индекс хийх
TensorFlow стандарт Python индексийг хамаарнаPython-д жагсаалт эсвэл жагсаалт индекс хийх, NumPy индексийн үндсэн нөхцөл.
- индекс 0 дээр эхлэх
- Эдгээр индексүүд нь эцсийн дор хуваалцах
- colons, :, ширээний хувьд ашиглаж байна: start:stop:step
rank_1_tensor = tf.constant([0, 1, 1, 2, 3, 5, 8, 13, 21, 34])
print(rank_1_tensor.numpy())
[ 0 1 1 2 3 5 8 13 21 34]
Scalar ашиглан индексийг олж авах:
print("First:", rank_1_tensor[0].numpy())
print("Second:", rank_1_tensor[1].numpy())
print("Last:", rank_1_tensor[-1].numpy())
First: 0
Second: 1
Last: 34
Indexing нь A:
Slice axis хадгалж байна:
print("Everything:", rank_1_tensor[:].numpy())
print("Before 4:", rank_1_tensor[:4].numpy())
print("From 4 to the end:", rank_1_tensor[4:].numpy())
print("From 2, before 7:", rank_1_tensor[2:7].numpy())
print("Every other item:", rank_1_tensor[::2].numpy())
print("Reversed:", rank_1_tensor[::-1].numpy())
Everything: [ 0 1 1 2 3 5 8 13 21 34]
Before 4: [0 1 1 2]
From 4 to the end: [ 3 5 8 13 21 34]
From 2, before 7: [1 2 3 5 8]
Every other item: [ 0 1 3 8 21]
Reversed: [34 21 13 8 5 3 2 1 1 0]
Multi-axis индекс хийх
Өндөр түвшинд tensors нь хэд хэдэн индекс дамжуулан индексж байна.
Эцэст нь нэг тэнхлэгийн тохиолдолд ижил нөхцөл нь тусгайлан бүх тэнхлэгийн хувьд хэрэглэдэг.
print(rank_2_tensor.numpy())
[[1. 2.]
[3. 4.]
[5. 6.]]
Бүх индексд нэг цайрдлыг дамжуулан, үр дүн нь scalar юм.
# Pull out a single value from a 2-rank tensor
print(rank_2_tensor[1, 1].numpy())
You can index using any combination of integers and slices:
# Get row and column tensors
print("Second row:", rank_2_tensor[1, :].numpy())
print("Second column:", rank_2_tensor[:, 1].numpy())
print("Last row:", rank_2_tensor[-1, :].numpy())
print("First item in last column:", rank_2_tensor[0, -1].numpy())
print("Skip the first row:")
print(rank_2_tensor[1:, :].numpy(), "\n")
Second row: [3. 4.]
Second column: [2. 4. 6.]
Last row: [5. 6.]
First item in last column: 2.0
Skip the first row:
[[3. 4.]
[5. 6.]]
Here is an example with a 3-axis tensor:
print(rank_3_tensor[:, :, 4])
tf.Tensor(
[[ 4 9]
[14 19]
[24 29]], shape=(3, 2), dtype=int32)
|
Selecting the last feature across all locations in each example in the batch |
---|---|
|
|
ЭдүүлбэрTensor Slicing гарын авлагаХэрэв та өөрийн tensors-ийн тусгай элементүүд нь манипуляцийг хэрхэн индексийг ашиглаж болно.
Манипулятор хэлбэр
Tensor шинэчлэх нь маш их ашигтай байдаг.
# Shape returns a `TensorShape` object that shows the size along each axis
x = tf.constant([[1], [2], [3]])
print(x.shape)
(3, 1)
# You can convert this object into a Python list, too
print(x.shape.as_list())
[3, 1]
Та tensor шинэ хэлбэрээр өөрчилж болно.tf.reshape
үйл ажиллагаа нь хурдан, хямд бөгөөд үндсэн өгөгдөл нь дуплицийг шаардлагатай биш юм.
# You can reshape a tensor to a new shape.
# Note that you're passing in a list
reshaped = tf.reshape(x, [1, 3])
print(x.shape)
print(reshaped.shape)
(3, 1)
(1, 3)
Бүх өгөгдөл нь хадгаламжийн байршуулалттай бөгөөд шинэ tensor үүсгэсэн, хүссэн хэлбэртэй, эдгээр өгөгдлийг харуулсан. TensorFlow C-style "row-major" хадгаламжийн байршуулалтыг ашигладаг.
print(rank_3_tensor)
tf.Tensor(
[[[ 0 1 2 3 4]
[ 5 6 7 8 9]]
[[10 11 12 13 14]
[15 16 17 18 19]]
[[20 21 22 23 24]
[25 26 27 28 29]]], shape=(3, 2, 5), dtype=int32)
Хэрэв та tensor хавтгайж байгаа бол та мэдэгдэж болно энэ нь меморид байрлуулсан орд юм.
# A `-1` passed in the `shape` argument says "Whatever fits".
print(tf.reshape(rank_3_tensor, [-1]))
tf.Tensor(
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
24 25 26 27 28 29], shape=(30,), dtype=int32)
Жишээ нь, зүгээр л разумтай хэрэглээtf.reshape
гадаргуудыг нэгтгэх эсвэл хуваалцах болно (а эсвэл нэмэх / илрүүлэх1
С)
Энэ 3x2x5 tensor нь (3x2)x5 эсвэл 3x(2x5) нь өөр өөрчилж, хуваалцах нь өөрчилж биш юм.
print(tf.reshape(rank_3_tensor, [3*2, 5]), "\n")
print(tf.reshape(rank_3_tensor, [3, -1]))
tf.Tensor(
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]
[25 26 27 28 29]], shape=(6, 5), dtype=int32)
tf.Tensor(
[[ 0 1 2 3 4 5 6 7 8 9]
[10 11 12 13 14 15 16 17 18 19]
[20 21 22 23 24 25 26 27 28 29]], shape=(3, 10), dtype=int32)
|
|
Some good reshapes. |
---|---|---|
|
|
|
Шинэ хэлбэлгээ нь эдгээр элементүүдтэй ямар ч шинэ хэлбэрийн хувьд "ажлын" болно, гэхдээ та зэврэлтийн оршин суурийг харж байгаа бол энэ нь ямар ч ашигтай зүйл биш болно.
гагнуурын гагнуурынtf.reshape
ажиллаж байгаа биш юм; Таtf.transpose
Энэ нь
# Bad examples: don't do this
# You can't reorder axes with reshape.
print(tf.reshape(rank_3_tensor, [2, 3, 5]), "\n")
# This is a mess
print(tf.reshape(rank_3_tensor, [5, 6]), "\n")
# This doesn't work at all
try:
tf.reshape(rank_3_tensor, [7, -1])
except Exception as e:
print(f"{type(e).__name__}: {e}")
tf.Tensor(
[[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
[[15 16 17 18 19]
[20 21 22 23 24]
[25 26 27 28 29]]], shape=(2, 3, 5), dtype=int32)
tf.Tensor(
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]
[24 25 26 27 28 29]], shape=(5, 6), dtype=int32)
InvalidArgumentError: { {function_node __wrapped__Reshape_device_/job:localhost/replica:0/task:0/device:GPU:0} } Input to reshape is a tensor with 30 values, but the requested shape requires a multiple of 7 [Op:Reshape]
|
|
Some bad reshapes. |
---|---|---|
|
|
|
Та бүрэн тодорхойлолтгүй хэлбэрүүд дээр ажиллуулж болно. Энэ хэлбэр ньNone
(хэсгийн урт нь мэддэггүй юм) эсвэл бүх хэлбэр ньNone
(Тензорын түвшний түвшний түвшний түвшний түвшний түвшний түвшний түвшний түвшний түвшний түвшний түвшний түвшний түвшний түвшний түвшний түвшний түвшний түвшний түвшний түвшний түвшний түвшний түвшний түвшний түвшний түвшний түвшний түвшний).
tf.RaggedTensor гэх мэт, ийм хэлбэрүүд зөвхөн TensorFlow-ийн символик, график үүсгэх API-ийн контекстд хийж болно:
- Tf. функц
- Hard Функциональ API.
ИлүүТүлхүүрүүд
Түлхүүрүүд
Үйлчлэх Atf.Tensor
Data Type нь хэрэглэдэгTensor.dtype
Зохиогчийн эрх
Үйлчлэхэд Atf.Tensor
Python-ийн объектонд өгөгдлийн төрөл сонголттай тодорхойлох боломжтой.
Хэрэв та биш бол, TensorFlow таны өгөгдлийг санал болгож чадах өгөгдлийг сонгоно. TensorFlow Python integers ньtf.int32
Python-ийн floating point numbers ньtf.float32
Дараа нь TensorFlow нь NumPy-ийг Array-д конвертируулсан үед ашигладаг эвдэрсэн нөхцөл ашигладаг.
Та төрөл нь төрөл нь хайж болно.
the_f64_tensor = tf.constant([2.2, 3.3, 4.4], dtype=tf.float64)
the_f16_tensor = tf.cast(the_f64_tensor, dtype=tf.float16)
# Now, cast to an uint8 and lose the decimal precision
the_u8_tensor = tf.cast(the_f16_tensor, dtype=tf.uint8)
print(the_u8_tensor)
tf.Tensor([2 3 4], shape=(3,), dtype=uint8)
Байгалийн
Телевизийн хэвлэл мэдээллийн талаарх талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи талаархи.NumPy-д эквивалент шинж чанарЦааш, зарим нөхцөлд, жижиг tensors автомат нь их tensors тохиромжтой, тэд дээр комбинирован операцийг ажиллуулах үед "ширгээ" байна.
Хамгийн хялбар, найдэвхтэй тохиолдолд нь нэг tensor нь scalar-д хуваалцах эсвэл нэмнэ үү. Энэ тохиолдолд scalar нь бусад аргументтай нэг хэлбэртэй байх болно.
x = tf.constant([1, 2, 3])
y = tf.constant(2)
z = tf.constant([2, 2, 2])
# All of these are the same computation
print(tf.multiply(x, 2))
print(x * y)
print(x * z)
tf.Tensor([2 4 6], shape=(3,), dtype=int32)
tf.Tensor([2 4 6], shape=(3,), dtype=int32)
tf.Tensor([2 4 6], shape=(3,), dtype=int32)
Үүнээс гадна, 1-ийн урт хавтгай нь бусад аргументийг харьцуулахын тулд урт хавтгай дүүргэх болно. Эдгээр хоёр аргументийг нэг тооцоолол дээр урт хавтгайж болно.
Энэ тохиолдолд 3x1 матриц нь элемент хэлбэрээр 1x4 матриц нь 3x4 матриц үүсгэдэг. Үзүүлэхийн тулд тэргүүлэх 1 сонголттай юм: y хэлбэр нь[4]
.
# These are the same computations
x = tf.reshape(x,[3,1])
y = tf.range(1, 5)
print(x, "\n")
print(y, "\n")
print(tf.multiply(x, y))
tf.Tensor(
[[1]
[2]
[3]], shape=(3, 1), dtype=int32)
tf.Tensor([1 2 3 4], shape=(4,), dtype=int32)
tf.Tensor(
[[ 1 2 3 4]
[ 2 4 6 8]
[ 3 6 9 12]], shape=(3, 4), dtype=int32)
A broadcasted add: a |
---|
|
Энд нэг ижил үйл явцыг хэвлэхгүй байна:
x_stretch = tf.constant([[1, 1, 1, 1],
[2, 2, 2, 2],
[3, 3, 3, 3]])
y_stretch = tf.constant([[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4]])
print(x_stretch * y_stretch) # Again, operator overloading
tf.Tensor(
[[ 1 2 3 4]
[ 2 4 6 8]
[ 3 6 9 12]], shape=(3, 4), dtype=int32)
Өнгөрсөн үед, дэлгэц нь цаг хугацаа, газар үр ашигтай бөгөөд дэлгэц үйл ажиллагаа нь зэмсэг tensors-ийг хуваалцахгүй юм.
Та үүнийг ашиглах гэж үзнэ үү Broadcasttf.broadcast_to
.
print(tf.broadcast_to(tf.constant([1, 2, 3]), [3, 3]))
tf.Tensor(
[[1 2 3]
[1 2 3]
[1 2 3]], shape=(3, 3), dtype=int32)
Математик op гэх мэт,broadcast_to
Үйлчлэхэд ямар ч онцгой зүйл биш юм. Энд та tensor-ийг материализуулж байна.
Энэ нь тэр ч байтугай илүү хялбар байж болно.Энэ хэсэгJake VanderPlas-ийн номPython Data Science гарын авлагадэлгэрэнгүй дэлгэцийн хийн дэлгэц (ямар ч NumPy).
тв.convert_to_tensor
Олон ops, гэх мэтtf.matmul
Нөхцөлtf.reshape
Класс аргументийг авчtf.Tensor
Гэсэн хэдий ч, та дээрх тохиолдолд харах болно, Tensors шиг хэлбэртэй Python орнууд хүлээн зөвшөөрч байна.
Ихэнх, гэхдээ бүх биш, ops callconvert_to_tensor
Тензоргүй аргументийн дээр. Конвертын реестр байдаг, NumPy-ийн шиг ихэнх объектын ангилалndarray
НөхцөлTensorShape
Python жагсаалт, болонtf.Variable
Бүх автоматаар өөрчлөх болно.
Зөвлөгөөtf.register_tensor_conversion_function
Дэлгэрэнгүй мэдээллийг, Хэрэв та өөрийн төрөл байгаа бол та автоматаар tensor-д конвертируулахыг хүсч байна.
Өргөтгөх Tensors
Тензор нь зарим тэнгисийн хооронд элементүүд нь янз бүрийн тоо нь "Ragged" гэж нэрлэдэг.tf.ragged.RaggedTensor
RAGED өгөгдлийн хувьд.
Жишээ нь, Энэ нь регуляр tensor гэж хэлж чадахгүй:
A |
---|
|
ragged_list = [
[0, 1, 2, 3],
[4, 5],
[6, 7, 8],
[9]]
try:
tensor = tf.constant(ragged_list)
except Exception as e:
print(f"{type(e).__name__}: {e}")
ValueError: Can't convert non-rectangular Python sequence to Tensor.
Үүнээс гадна, atf.RaggedTensor
Бүртгүүлэхtf.ragged.constant
:
ragged_tensor = tf.ragged.constant(ragged_list)
print(ragged_tensor)
<tf.RaggedTensor [[0, 1, 2, 3], [4, 5], [6, 7, 8], [9]]>
хэлбэр нь Atf.RaggedTensor
Зөвлөмжгүй урт нь зарим зэргийн агуулсан болно:
print(ragged_tensor.shape)
(4, None)
String Тендерүүд
tf.string
Энэ ньdtype
, Энэ нь та tensors-д string (variable-length byte array) хэлбэрээр өгөгдлийг хуваалцах боломжтой.
Шилэн нь атомын бөгөөд Python шилэн шиг индексж болно. Шилэн урт нь tensor-ийн тэнгисийн нэг биш юм.tf.strings
Функцийг манипулятор хийх.
Энд scalar string tensor байна:
# Tensors can be strings, too here is a scalar string.
scalar_string_tensor = tf.constant("Gray wolf")
print(scalar_string_tensor)
tf.Tensor(b'Gray wolf', shape=(), dtype=string)
Нөхцөл нь вектор:
A vector of strings, shape: |
---|
|
# If you have three string tensors of different lengths, this is OK.
tensor_of_strings = tf.constant(["Gray wolf",
"Quick brown fox",
"Lazy dog"])
# Note that the shape is (3,). The string length is not included.
print(tensor_of_strings)
tf.Tensor([b'Gray wolf' b'Quick brown fox' b'Lazy dog'], shape=(3,), dtype=string)
Үүнээс дээш хэвлэсэнb
Prefix гэж үздэгtf.string
dtype нь unicode цуврал биш бөгөөд байт цуврал юм.Unicode ТавилгаТа TensorFlow-д Unicode тексттэй ажиллах талаар дэлгэрэнгүй мэдээлэл авах.
Хэрэв та Unicode хэлбэрээр илгээж байгаа бол энэ нь utf-8 кодирован юм.
tf.constant("🥳👍")
<tf.Tensor: shape=(), dtype=string, numpy=b'\xf0\x9f\xa5\xb3\xf0\x9f\x91\x8d'>
Нэмэлт үндсэн функцүүд нь шугам дээр олж болноtf.strings
Үүнээс гаднаtf.strings.split
.
# You can use split to split a string into a set of tensors
print(tf.strings.split(scalar_string_tensor, sep=" "))
tf.Tensor([b'Gray' b'wolf'], shape=(2,), dtype=string)
# ...but it turns into a `RaggedTensor` if you split up a tensor of strings,
# as each string might be split into a different number of parts.
print(tf.strings.split(tensor_of_strings))
<tf.RaggedTensor [[b'Gray', b'wolf'], [b'Quick', b'brown', b'fox'], [b'Lazy', b'dog']]>
Three strings split, shape: |
---|
|
Нөхцөлtf.strings.to_number
:
text = tf.constant("1 10 100")
print(tf.strings.to_number(tf.strings.split(text, " ")))
tf.Tensor([ 1. 10. 100.], shape=(3,), dtype=float32)
Хэрэв та ашиглаж чадахгүйtf.cast
Шилэн tensor-ийг тоо болгон хувиргахын тулд, та үүнийг байт, дараа нь тоо болгон хувиргах боломжтой.
byte_strings = tf.strings.bytes_split(tf.constant("Duck"))
byte_ints = tf.io.decode_raw(tf.constant("Duck"), tf.uint8)
print("Byte strings:", byte_strings)
print("Bytes:", byte_ints)
Byte strings: tf.Tensor([b'D' b'u' b'c' b'k'], shape=(4,), dtype=string)
Bytes: tf.Tensor([ 68 117 99 107], shape=(4,), dtype=uint8)
# Or split it up as unicode and then decode it
unicode_bytes = tf.constant("アヒル 🦆")
unicode_char_bytes = tf.strings.unicode_split(unicode_bytes, "UTF-8")
unicode_values = tf.strings.unicode_decode(unicode_bytes, "UTF-8")
print("\nUnicode bytes:", unicode_bytes)
print("\nUnicode chars:", unicode_char_bytes)
print("\nUnicode values:", unicode_values)
Unicode bytes: tf.Tensor(b'\xe3\x82\xa2\xe3\x83\x92\xe3\x83\xab \xf0\x9f\xa6\x86', shape=(), dtype=string)
Unicode chars: tf.Tensor([b'\xe3\x82\xa2' b'\xe3\x83\x92' b'\xe3\x83\xab' b' ' b'\xf0\x9f\xa6\x86'], shape=(5,), dtype=string)
Unicode values: tf.Tensor([ 12450 12498 12523 32 129414], shape=(5,), dtype=int32)
Нөхцөлtf.string
dtype нь TensorFlow-д бүх зэвэрдэггүй байтын өгөгдлийн хувьд ашиглаж байна.tf.io
модуль нь байт руу болон байт руу өгөгдлийг хувиргах функцийг агуулдаг, харин зураг decoding болон csv-ийг анхааралтай.
Тохируулга Tensors
Гэсэн хэдий ч, таны өгөгдөл нь хязгаарлагдмал байдаг. TensorFlow дэмждэгtf.sparse.SparseTensor
болон холбоотой үйл ажиллагаа нь хязгаарлагдмал өгөгдлийг үр ашигтай хадгалах.
A |
---|
|
# Sparse tensors store values by index in a memory-efficient manner
sparse_tensor = tf.sparse.SparseTensor(indices=[[0, 0], [1, 2]],
values=[1, 2],
dense_shape=[3, 4])
print(sparse_tensor, "\n")
# You can convert sparse tensors to dense
print(tf.sparse.to_dense(sparse_tensor))
SparseTensor(indices=tf.Tensor(
[[0 0]
[1 2]], shape=(2, 2), dtype=int64), values=tf.Tensor([1 2], shape=(2,), dtype=int32), dense_shape=tf.Tensor([3 4], shape=(2,), dtype=int64))
tf.Tensor(
[[1 0 0 0]
[0 0 2 0]
[0 0 0 0]], shape=(3, 4), dtype=int32)
Эхлээд TensorFlow вэбсайт дээр хуваалцах, Энэ нийтлэл нь шинэ нэрээр харуулсан бөгөөд CC BY 4.0-ийн дагуу лицензтай. Apache 2.0 Лиценз дагуу хуваалцах код дээж.
Originally published on the TensorFlow вэб сайт,Энэ нийтлэл нь шинэ бүтэцтэй байдаг бөгөөд энэ нь лицензтай байдагCC BY 4.0.Код дээж дагуу хуваалцсанApache 2.0 License.
TensorFlow вэб сайт