Перетворення
Перетворення тензорів
У цьому уроці розглядаються розширені операції перетворення тензорів.
Перетворення тензорів є важливими при роботі з даними. З поглибленням у задачі глибокого навчання та науки про дані стає очевидним, що отримані дані не завжди мають бажаний формат. У цьому уроці розглядаються методи 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 are some common use cases for slicing tensors?
How do I decide which axis to use when concatenating tensors?
Awesome!
Completion rate improved to 6.25
Перетворення
Свайпніть щоб показати меню
Перетворення тензорів
У цьому уроці розглядаються розширені операції перетворення тензорів.
Перетворення тензорів є важливими при роботі з даними. З поглибленням у задачі глибокого навчання та науки про дані стає очевидним, що отримані дані не завжди мають бажаний формат. У цьому уроці розглядаються методи 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