Перетворення
Перетворення тензорів
У цьому уроці розглядаються розширені операції перетворення тензорів.
Перетворення тензорів є важливими при роботі з даними. З поглибленням у завдання глибокого навчання та науки про дані стає очевидним, що дані, з якими працюють, не завжди мають бажаний формат. У цьому уроці розглядаються методи TensorFlow, які дозволяють маніпулювати структурою та вмістом тензорів для задоволення конкретних вимог.
Зміна форми тензорів
Під час роботи з тензорами іноді виникає потреба змінити форму без зміни самих даних. У таких випадках корисною є функція tf.reshape().
Як це працює:
- Зміна форми змінює структуру тензора, але не його дані. Загальна кількість елементів до та після зміни форми має залишатися незмінною;
- Операція виконується шляхом "заповнення" нової форми по рядках (зліва направо, зверху вниз).
1234567891011121314import 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)
Під час вказування нової форми одна з вимірностей може бути -1. TensorFlow обчислить розмір цієї вимірності так, щоб загальний розмір залишався незмінним.
Це особливо корисно, коли потрібно подати тензори до нейронної мережі, але розміри не відповідають формі вхідних даних мережі.
Зрізи
Зрізи дозволяють отримати частину тензора. Це аналогічно зрізам списків у Python, але розширено для багатовимірних тензорів.
Як це працює:
tf.slice()витягує зріз із тензора. Потрібно вказати початковий індекс для зрізу та розмір зрізу;- Якщо розмір дорівнює
-1, це означає всі елементи у цій вимірності.
12345678910111213import 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)
Завжди пам'ятайте про нульову індексацію у TensorFlow, яка подібна до нативної індексації в Python. Корисно для вибірки конкретних ознак або даних із більшого набору даних.
Модифікація даних
Існує інший спосіб зрізу, який також дозволяє змінювати оригінальні дані, подібно до зрізів масивів у NumPy.
Як це працює:
- Використовуючи
[], можна легко виконувати зрізи та індексацію тензорів, аналогічно до зрізів у NumPy. Цей підхід дозволяє вибирати конкретні рядки, стовпці або елементи тензора; - З
tf.Variable()тензор стає змінним, що дозволяє напряму змінювати його за допомогою зрізів; - Щоб змінити значення вибраного підтензора, використовуйте метод
.assign()з тензором або списком, що відповідає його формі.
12345678910111213import 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)
- Синтаксис зрізів у TensorFlow значною мірою натхненний NumPy, тому якщо ви знайомі з NumPy, перехід до механізму зрізів TensorFlow буде простим;
- Завжди використовуйте
tf.Variable()для будь-яких операцій, які потребують змінності тензора.
Об'єднання (Concatenating)
Об'єднання дозволяє з'єднувати кілька тензорів уздовж заданої осі.
Як це працює:
tf.concat()об'єднує тензори. Метод вимагає список тензорів, які потрібно об'єднати, та вісь, уздовж якої виконується операція;- Вісь нумерується з нуля. Вісь
0означає рядки (вертикально), а вісь1— стовпці (горизонтально).
123456789101112131415161718import 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)
- Переконайтеся, що тензори, які ви об'єднуєте, мають однакові розміри по всіх не конкатенованих осях;
- Ця операція подібна до
numpy.concatenate(), але спеціально адаптована для тензорів TensorFlow.
Swipe to start coding
Передумови
Ви працюєте з набором даних, що складається з показників різних сенсорів, розміщених у різних географічних точках. Ці сенсори фіксують погодні дані, такі як температура, тиск і нормалізовані географічні координати.
Однак під час збирання даних з'ясувалося, що деякі показники були записані некоректно.
Також ви отримали нові показники від інших сенсорів, які потрібно додати.
Інформація про набір даних
-
main_dataset: Тензор розмірності(6, 4), що містить 6 показників. Кожен рядок — це окремий зразок, а стовпці відповідають таким ознакам:- Температура (у градусах Цельсія);
- Тиск (у гПа);
- Нормалізована координата широти;
- Нормалізована координата довготи.
-
error_correction_data: Тензор розмірності(2, 4), що містить 2 виправлені показники для помилкових даних у основному наборі. -
additional_data: Тензор розмірності(3, 4), що містить 3 нові показники.
Мета
Підготуйте виправлений і повний набір даних для прогнозування погоди:
-
Виправлення даних:
- Виявлено, що показники у 2-му та 5-му рядках
main_datasetє некоректними. Замініть ці рядки уmain_datasetна відповідні рядки зerror_correction_data.
- Виявлено, що показники у 2-му та 5-му рядках
-
Додавання нових даних:
- Об'єднайте
main_datasetзadditional_data, щоб включити нові показники.
- Об'єднайте
-
Формування батчів:
- Для навчання пакетами розбийте набір даних на батчі по 3 показники в кожному. Змініть форму
complete_dataset, де перший вимір — це розмір батча, а другий — кількість показників у батчі.
- Для навчання пакетами розбийте набір даних на батчі по 3 показники в кожному. Змініть форму
Рішення
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
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?
Awesome!
Completion rate improved to 5.56
Перетворення
Свайпніть щоб показати меню
Перетворення тензорів
У цьому уроці розглядаються розширені операції перетворення тензорів.
Перетворення тензорів є важливими при роботі з даними. З поглибленням у завдання глибокого навчання та науки про дані стає очевидним, що дані, з якими працюють, не завжди мають бажаний формат. У цьому уроці розглядаються методи TensorFlow, які дозволяють маніпулювати структурою та вмістом тензорів для задоволення конкретних вимог.
Зміна форми тензорів
Під час роботи з тензорами іноді виникає потреба змінити форму без зміни самих даних. У таких випадках корисною є функція tf.reshape().
Як це працює:
- Зміна форми змінює структуру тензора, але не його дані. Загальна кількість елементів до та після зміни форми має залишатися незмінною;
- Операція виконується шляхом "заповнення" нової форми по рядках (зліва направо, зверху вниз).
1234567891011121314import 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)
Під час вказування нової форми одна з вимірностей може бути -1. TensorFlow обчислить розмір цієї вимірності так, щоб загальний розмір залишався незмінним.
Це особливо корисно, коли потрібно подати тензори до нейронної мережі, але розміри не відповідають формі вхідних даних мережі.
Зрізи
Зрізи дозволяють отримати частину тензора. Це аналогічно зрізам списків у Python, але розширено для багатовимірних тензорів.
Як це працює:
tf.slice()витягує зріз із тензора. Потрібно вказати початковий індекс для зрізу та розмір зрізу;- Якщо розмір дорівнює
-1, це означає всі елементи у цій вимірності.
12345678910111213import 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)
Завжди пам'ятайте про нульову індексацію у TensorFlow, яка подібна до нативної індексації в Python. Корисно для вибірки конкретних ознак або даних із більшого набору даних.
Модифікація даних
Існує інший спосіб зрізу, який також дозволяє змінювати оригінальні дані, подібно до зрізів масивів у NumPy.
Як це працює:
- Використовуючи
[], можна легко виконувати зрізи та індексацію тензорів, аналогічно до зрізів у NumPy. Цей підхід дозволяє вибирати конкретні рядки, стовпці або елементи тензора; - З
tf.Variable()тензор стає змінним, що дозволяє напряму змінювати його за допомогою зрізів; - Щоб змінити значення вибраного підтензора, використовуйте метод
.assign()з тензором або списком, що відповідає його формі.
12345678910111213import 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)
- Синтаксис зрізів у TensorFlow значною мірою натхненний NumPy, тому якщо ви знайомі з NumPy, перехід до механізму зрізів TensorFlow буде простим;
- Завжди використовуйте
tf.Variable()для будь-яких операцій, які потребують змінності тензора.
Об'єднання (Concatenating)
Об'єднання дозволяє з'єднувати кілька тензорів уздовж заданої осі.
Як це працює:
tf.concat()об'єднує тензори. Метод вимагає список тензорів, які потрібно об'єднати, та вісь, уздовж якої виконується операція;- Вісь нумерується з нуля. Вісь
0означає рядки (вертикально), а вісь1— стовпці (горизонтально).
123456789101112131415161718import 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)
- Переконайтеся, що тензори, які ви об'єднуєте, мають однакові розміри по всіх не конкатенованих осях;
- Ця операція подібна до
numpy.concatenate(), але спеціально адаптована для тензорів TensorFlow.
Swipe to start coding
Передумови
Ви працюєте з набором даних, що складається з показників різних сенсорів, розміщених у різних географічних точках. Ці сенсори фіксують погодні дані, такі як температура, тиск і нормалізовані географічні координати.
Однак під час збирання даних з'ясувалося, що деякі показники були записані некоректно.
Також ви отримали нові показники від інших сенсорів, які потрібно додати.
Інформація про набір даних
-
main_dataset: Тензор розмірності(6, 4), що містить 6 показників. Кожен рядок — це окремий зразок, а стовпці відповідають таким ознакам:- Температура (у градусах Цельсія);
- Тиск (у гПа);
- Нормалізована координата широти;
- Нормалізована координата довготи.
-
error_correction_data: Тензор розмірності(2, 4), що містить 2 виправлені показники для помилкових даних у основному наборі. -
additional_data: Тензор розмірності(3, 4), що містить 3 нові показники.
Мета
Підготуйте виправлений і повний набір даних для прогнозування погоди:
-
Виправлення даних:
- Виявлено, що показники у 2-му та 5-му рядках
main_datasetє некоректними. Замініть ці рядки уmain_datasetна відповідні рядки зerror_correction_data.
- Виявлено, що показники у 2-му та 5-му рядках
-
Додавання нових даних:
- Об'єднайте
main_datasetзadditional_data, щоб включити нові показники.
- Об'єднайте
-
Формування батчів:
- Для навчання пакетами розбийте набір даних на батчі по 3 показники в кожному. Змініть форму
complete_dataset, де перший вимір — це розмір батча, а другий — кількість показників у батчі.
- Для навчання пакетами розбийте набір даних на батчі по 3 показники в кожному. Змініть форму
Рішення
Дякуємо за ваш відгук!
single