Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Перетворення | Тензори
Вступ до TensorFlow

bookПеретворення

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

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

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

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

Під час роботи з тензорами іноді виникає потреба змінити форму без зміни самих даних. У таких випадках корисною є функція tf.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)
copy
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)
copy
Note
Примітка

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

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

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

Як це працює:

  • Використовуючи [], можна легко виконувати зрізи та індексацію тензорів, аналогічно до зрізів у NumPy. Цей підхід дозволяє вибирати конкретні рядки, стовпці або елементи тензора;
  • З tf.Variable() тензор стає змінним, що дозволяє напряму змінювати його за допомогою зрізів;
  • Щоб змінити значення вибраного підтензора, використовуйте метод .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)
copy
Note
Примітка
  • Синтаксис зрізів у TensorFlow значною мірою натхненний NumPy, тому якщо ви знайомі з NumPy, перехід до механізму зрізів TensorFlow буде простим;
  • Завжди використовуйте tf.Variable() для будь-яких операцій, які потребують змінності тензора.

Об'єднання (Concatenating)

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

Як це працює:

  • tf.concat() об'єднує тензори. Метод вимагає список тензорів, які потрібно об'єднати, та вісь, уздовж якої виконується операція;
  • Вісь нумерується з нуля. Вісь 0 означає рядки (вертикально), а вісь 1 — стовпці (горизонтально).
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)
copy
Note
Примітка
  • Переконайтеся, що тензори, які ви об'єднуєте, мають однакові розміри по всіх не конкатенованих осях;
  • Ця операція подібна до numpy.concatenate(), але спеціально адаптована для тензорів TensorFlow.
Завдання

Swipe to start coding

Передумови

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

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

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

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

  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, де перший вимір — це розмір батча, а другий — кількість показників у батчі.

Рішення

Все було зрозуміло?

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

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

Секція 1. Розділ 11
single

single

Запитати АІ

expand

Запитати АІ

ChatGPT

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

Suggested prompts:

Can you explain more about how tf.reshape() works?

What happens if I try to reshape a tensor to an incompatible shape?

Can you give more examples of slicing and modifying tensors?

close

Awesome!

Completion rate improved to 5.56

bookПеретворення

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

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

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

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

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

Під час роботи з тензорами іноді виникає потреба змінити форму без зміни самих даних. У таких випадках корисною є функція tf.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)
copy
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)
copy
Note
Примітка

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

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

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

Як це працює:

  • Використовуючи [], можна легко виконувати зрізи та індексацію тензорів, аналогічно до зрізів у NumPy. Цей підхід дозволяє вибирати конкретні рядки, стовпці або елементи тензора;
  • З tf.Variable() тензор стає змінним, що дозволяє напряму змінювати його за допомогою зрізів;
  • Щоб змінити значення вибраного підтензора, використовуйте метод .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)
copy
Note
Примітка
  • Синтаксис зрізів у TensorFlow значною мірою натхненний NumPy, тому якщо ви знайомі з NumPy, перехід до механізму зрізів TensorFlow буде простим;
  • Завжди використовуйте tf.Variable() для будь-яких операцій, які потребують змінності тензора.

Об'єднання (Concatenating)

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

Як це працює:

  • tf.concat() об'єднує тензори. Метод вимагає список тензорів, які потрібно об'єднати, та вісь, уздовж якої виконується операція;
  • Вісь нумерується з нуля. Вісь 0 означає рядки (вертикально), а вісь 1 — стовпці (горизонтально).
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)
copy
Note
Примітка
  • Переконайтеся, що тензори, які ви об'єднуєте, мають однакові розміри по всіх не конкатенованих осях;
  • Ця операція подібна до numpy.concatenate(), але спеціально адаптована для тензорів TensorFlow.
Завдання

Swipe to start coding

Передумови

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

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

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

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

  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Перейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
Все було зрозуміло?

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

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

Секція 1. Розділ 11
single

single

some-alt