single
Перетворення
Свайпніть щоб показати меню
Перетворення тензорів є ключовими при роботі з даними. Зі зростанням досвіду у сфері глибокого навчання та задачах обробки даних стає очевидним, що отримані дані не завжди мають потрібний формат. У цьому уроці розглядаються методи 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
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат