Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Трансформації | Tensor Operations and Execution
Вступ до TensorFlow

Трансформації

Перетворення тензорів

У цьому уроці розглядаються розширені операції перетворення тензорів.

Перетворення тензорів є важливими при роботі з даними. З поглибленням у завдання глибокого навчання та науки про дані стає очевидним, що дані, з якими працюють, не завжди мають потрібний формат. У цьому уроці розглядаються методи TensorFlow, які дозволяють маніпулювати структурою та вмістом тензорів для задоволення конкретних вимог.

Зміна форми тензорів

Під час роботи з тензорами іноді виникає потреба змінити форму без зміни самих даних. У таких випадках використовується tf.reshape().

Як це працює:

  • Зміна форми змінює структуру тензора, але не його дані. Загальна кількість елементів до та після зміни форми має залишатися незмінною;
  • Операція виконується шляхом "заповнення" нової форми по рядках (зліва направо, зверху вниз).
reshape
1234567891011121314
import tensorflow as tf # Create a tensor with shape (3, 2) tensor = tf.constant([[1, 2], [3, 4], [5, 6]]) # Reshape the tensor to shape (2, 3) reshaped_tensor = tf.reshape(tensor, (2, 3)) print(reshaped_tensor) print('-' * 50) # Reshape the tensor to shape (6, 1); # The size of the first dimention is determined automatically reshaped_tensor = tf.reshape(tensor, (-1, 1)) print(reshaped_tensor)
Note
Примітка

Під час вказування нової форми один з вимірів може бути -1. TensorFlow обчислить розмір цього виміру так, щоб загальний розмір залишався незмінним.

Це особливо корисно, коли потрібно передати тензори в нейронну мережу, але розміри не відповідають формі вхідних даних мережі.

Зрізи

Зрізи дозволяють отримати частину тензора. Це аналогічно зрізам списків у Python, але розширено для багатовимірних тензорів.

Як це працює:

  • tf.slice() витягує зріз із тензора. Потрібно вказати початковий індекс зрізу та розмір зрізу;
  • Якщо розмір дорівнює -1, це означає всі елементи у цьому вимірі.
зріз
12345678910111213
import tensorflow as tf # Create a tensor tensor = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # Slice tensor to extract sub-tensor from index (0, 1) of size (1, 2) sliced_tensor = tf.slice(tensor, begin=(0, 1), size=(1, 2)) print(sliced_tensor) print('-' * 50) # Slice tensor to extract sub-tensor from index (1, 0) of size (2, 2) sliced_tensor = tf.slice(tensor, (1, 0), (2, 2)) print(sliced_tensor)
Note
Примітка

Завжди пам'ятати про нульову індексацію у TensorFlow, яка подібна до нативної індексації в Python. Корисно для виділення конкретних ознак або точок даних із більшого набору даних.

Модифікація даних

Існує інший спосіб зрізу, який також дозволяє змінювати оригінальні дані, подібно до зрізів масивів у NumPy.

Як це працює:

  • Використовуючи [], можна легко виконувати зрізи та індексацію тензорів, аналогічно до зрізів у NumPy. Цей підхід дозволяє вибирати конкретні рядки, стовпці або елементи тензора;
  • За допомогою tf.Variable() тензор стає змінним, що дозволяє напряму змінювати його за допомогою зрізів;
  • Для зміни значень вибраного підтензора використовуйте метод .assign() з тензором або списком, що відповідає його формі.
assign
12345678910111213
import tensorflow as tf # Create a mutable tensor tensor = tf.Variable([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # Change the entire first row tensor[0, :].assign([0, 0, 0]) print(tensor) print('-' * 80) # Modify the second and the third columns tensor[:, 1:3].assign(tf.fill((3,2), 1)) print(tensor)
Note
Примітка
  • Синтаксис зрізів у TensorFlow значною мірою натхненний NumPy, тому якщо ви знайомі з NumPy, перехід до механізму зрізів TensorFlow буде простим;
  • Завжди переконуйтеся, що використовуєте tf.Variable() для будь-яких операцій, які потребують змінності тензора.

Об'єднання

Об'єднання дозволяє з'єднувати кілька тензорів уздовж заданої осі.

Як це працює:

  • tf.concat() об'єднує тензори. Метод вимагає список тензорів, які потрібно об'єднати, і вісь, уздовж якої виконується операція;
  • Відлік осей починається з нуля. Вісь 0 означає рядки (вертикально), а вісь 1 — стовпці (горизонтально).
concat_fixed
123456789101112131415161718
import tensorflow as tf # Create two tensors tensor1 = tf.constant([[1, 2, 3], [4, 5, 6]]) tensor2 = tf.constant([[7, 8, 9]]) # Concatenate tensors vertically (along rows) concatenated_tensor = tf.concat([tensor1, tensor2], axis=0) print(concatenated_tensor) print('-' * 50) # Create another set of tensors tensor3 = tf.constant([[1, 2], [4, 5]]) tensor4 = tf.constant([[3], [6]]) # Concatenate tensors horizontally (along columns) concatenated_tensor = tf.concat([tensor3, tensor4], axis=1) print(concatenated_tensor)
Note
Примітка
  • Переконайтеся, що тензори, які ви об'єднуєте, мають однакові розміри по не об'єднуваних осях;
  • Ця операція подібна до numpy.concatenate(), але адаптована для тензорів TensorFlow.
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 3
single

single

Трансформації

Свайпніть щоб показати меню

Перетворення тензорів

У цьому уроці розглядаються розширені операції перетворення тензорів.

Перетворення тензорів є важливими при роботі з даними. З поглибленням у завдання глибокого навчання та науки про дані стає очевидним, що дані, з якими працюють, не завжди мають потрібний формат. У цьому уроці розглядаються методи TensorFlow, які дозволяють маніпулювати структурою та вмістом тензорів для задоволення конкретних вимог.

Зміна форми тензорів

Під час роботи з тензорами іноді виникає потреба змінити форму без зміни самих даних. У таких випадках використовується tf.reshape().

Як це працює:

  • Зміна форми змінює структуру тензора, але не його дані. Загальна кількість елементів до та після зміни форми має залишатися незмінною;
  • Операція виконується шляхом "заповнення" нової форми по рядках (зліва направо, зверху вниз).
reshape
1234567891011121314
import tensorflow as tf # Create a tensor with shape (3, 2) tensor = tf.constant([[1, 2], [3, 4], [5, 6]]) # Reshape the tensor to shape (2, 3) reshaped_tensor = tf.reshape(tensor, (2, 3)) print(reshaped_tensor) print('-' * 50) # Reshape the tensor to shape (6, 1); # The size of the first dimention is determined automatically reshaped_tensor = tf.reshape(tensor, (-1, 1)) print(reshaped_tensor)
Note
Примітка

Під час вказування нової форми один з вимірів може бути -1. TensorFlow обчислить розмір цього виміру так, щоб загальний розмір залишався незмінним.

Це особливо корисно, коли потрібно передати тензори в нейронну мережу, але розміри не відповідають формі вхідних даних мережі.

Зрізи

Зрізи дозволяють отримати частину тензора. Це аналогічно зрізам списків у Python, але розширено для багатовимірних тензорів.

Як це працює:

  • tf.slice() витягує зріз із тензора. Потрібно вказати початковий індекс зрізу та розмір зрізу;
  • Якщо розмір дорівнює -1, це означає всі елементи у цьому вимірі.
зріз
12345678910111213
import tensorflow as tf # Create a tensor tensor = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # Slice tensor to extract sub-tensor from index (0, 1) of size (1, 2) sliced_tensor = tf.slice(tensor, begin=(0, 1), size=(1, 2)) print(sliced_tensor) print('-' * 50) # Slice tensor to extract sub-tensor from index (1, 0) of size (2, 2) sliced_tensor = tf.slice(tensor, (1, 0), (2, 2)) print(sliced_tensor)
Note
Примітка

Завжди пам'ятати про нульову індексацію у TensorFlow, яка подібна до нативної індексації в Python. Корисно для виділення конкретних ознак або точок даних із більшого набору даних.

Модифікація даних

Існує інший спосіб зрізу, який також дозволяє змінювати оригінальні дані, подібно до зрізів масивів у NumPy.

Як це працює:

  • Використовуючи [], можна легко виконувати зрізи та індексацію тензорів, аналогічно до зрізів у NumPy. Цей підхід дозволяє вибирати конкретні рядки, стовпці або елементи тензора;
  • За допомогою tf.Variable() тензор стає змінним, що дозволяє напряму змінювати його за допомогою зрізів;
  • Для зміни значень вибраного підтензора використовуйте метод .assign() з тензором або списком, що відповідає його формі.
assign
12345678910111213
import tensorflow as tf # Create a mutable tensor tensor = tf.Variable([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # Change the entire first row tensor[0, :].assign([0, 0, 0]) print(tensor) print('-' * 80) # Modify the second and the third columns tensor[:, 1:3].assign(tf.fill((3,2), 1)) print(tensor)
Note
Примітка
  • Синтаксис зрізів у TensorFlow значною мірою натхненний NumPy, тому якщо ви знайомі з NumPy, перехід до механізму зрізів TensorFlow буде простим;
  • Завжди переконуйтеся, що використовуєте tf.Variable() для будь-яких операцій, які потребують змінності тензора.

Об'єднання

Об'єднання дозволяє з'єднувати кілька тензорів уздовж заданої осі.

Як це працює:

  • tf.concat() об'єднує тензори. Метод вимагає список тензорів, які потрібно об'єднати, і вісь, уздовж якої виконується операція;
  • Відлік осей починається з нуля. Вісь 0 означає рядки (вертикально), а вісь 1 — стовпці (горизонтально).
concat_fixed
123456789101112131415161718
import tensorflow as tf # Create two tensors tensor1 = tf.constant([[1, 2, 3], [4, 5, 6]]) tensor2 = tf.constant([[7, 8, 9]]) # Concatenate tensors vertically (along rows) concatenated_tensor = tf.concat([tensor1, tensor2], axis=0) print(concatenated_tensor) print('-' * 50) # Create another set of tensors tensor3 = tf.constant([[1, 2], [4, 5]]) tensor4 = tf.constant([[3], [6]]) # Concatenate tensors horizontally (along columns) concatenated_tensor = tf.concat([tensor3, tensor4], axis=1) print(concatenated_tensor)
Note
Примітка
  • Переконайтеся, що тензори, які ви об'єднуєте, мають однакові розміри по не об'єднуваних осях;
  • Ця операція подібна до numpy.concatenate(), але адаптована для тензорів TensorFlow.
Завдання

Проведіть, щоб почати кодувати

Передумови

Ви працюєте з набором даних, що складається з показників різних сенсорів, розташованих у різних географічних точках. Ці сенсори фіксують погодні дані, такі як температура, тиск і нормалізовані географічні координати.

Однак під час збирання даних ви виявили, що деякі показники були записані некоректно.

Також ви отримали нові показники з інших сенсорів, які потрібно додати.

Інформація про набір даних

  1. main_dataset: Тензор розмірності (6, 4), що містить 6 показників. Кожен рядок — це окремий зразок, а стовпці відповідають таким ознакам:

    • Температура (у градусах Цельсія);
    • Тиск (у гПа);
    • Нормалізована широта;
    • Нормалізована довгота.
  2. error_correction_data: Тензор розмірності (2, 4), що містить 2 виправлені показники для некоректних даних у основному наборі.

  3. additional_data: Тензор розмірності (3, 4), що містить 3 нові показники.

Мета

Підготуйте виправлений і повний набір даних для прогнозування погоди:

  1. Виправлення даних:

    • Ви з'ясували, що показники у 2-му та 5-му рядках main_dataset були некоректними. Замініть ці рядки у main_dataset рядками з error_correction_data.
  2. Додавання нових даних:

    • Об'єднайте main_dataset з additional_data, щоб включити нові показники.
  3. Формування батчів:

    • Для навчання пакетами розділіть набір даних на батчі по 3 показники в кожному. Змініть форму complete_dataset, де перший вимір — це розмір батча, а другий — кількість показників у батчі.

Рішення

Switch to desktopПерейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 3
single

single

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

some-alt