Tensorflow – линейные уравнения
О технологиях

Tensorflow – линейные уравнения

1074
5 минут

При помощи функции tf.matrix_solve TensorFlow может решать системы линейных уравнений.

При помощи функции tf.matrix_solve TensorFlow может решать и системы линейных уравнений (набор связанных функций, записанных, например, следующим образом):

3x+2y=15

4x−y=10

В принципе, эти уравнения можно решить при помощи целого ряда всевозможных методов, но в этой статье мы посмотрим на то, как для этого использовать tf.matrix_solve в TensorFlow.

Пример c обычной прямой

Для начала, давайте рассмотрим простой пример. Вот две точки: p1 и p2, лежащие в двумерном (x, y) пространстве:

p1=(1,2)

p2=(0,−1)

TensorFlow-Linear-Equations-Example-1-Points.png
Давайте найдем уравнение прямой, проходящей через них.

TensorFlow-Linear-Equations-Example-1-Points-with-line.png

Напомню, что уравнение прямой выглядит следующим образом:

y=ax+b

Перепишем это уравнение прямой в следующем виде:

y–ax=b

1/b*y–a/b*x=1

Это стандартное матричное уравнение вида

AX=B

Где

A=[1/b a/b];

X=[x y];

B=1

Полная запись уравнения будет следующей:

[1/b a/b][x y]=[1]

Из этого уравнения надо найти a и b при известном X. Т.е. просто посчитать A:

A=BX−1

С учетом того, что вы уже знакомы с матричными операциями в TensorFlow, сделать это вам не составит труда:


import tensorflow as tf

# Точка p1 = [1, 2]
x1 = tf.constant(1, dtype=tf.float32)
y1 = tf.constant(2, dtype=tf.float32)
point1 = tf.stack([x1, y1])

# Точка p2 = [0, -1]
x2 = tf.constant(0, dtype=tf.float32)
y2 = tf.constant(-1, dtype=tf.float32)
point2 = tf.stack([x2, y2])

# Собираем точки в X = [[1,2],[0 -1]]
X = tf.transpose(tf.stack([point1, point2]))

# B = [1, 1]
B = tf.ones((1, 2), dtype=tf.float32)

Определим операцию умножения и получим A:


# Операция уможения B на X^-1
parameters = tf.matmul(B, tf.matrix_inverse(X))

# Запускаем сессию и получаем результат
with tf.Session() as session:
    A = session.run(parameters)

Теперь мы легко получим a и b:


b = 1 / A[0][1]
a = -b * A[0][0]

print(u"Через точки проходит прямая: y = {a}x + {b}".format(a=a, b=b))

Код в Jupyter Notebook:

TensorFlow-Linear-Equations-Example-1-Result.png

y=3.0x–1.0

Пример с окружностью

TensorFlow-Linear-Equations-Example-2-Result-Graph.png

Предположим, у нас есть 3 точки, которые лежат на окружности:

p1=(2,1)

p2=(0,5)

p3=(−1,2)

Давайте найдем уравнение этой окружности.

Каноническое уравнение окружности в общем виде выглядит следующим образом:

x2+y2+dx+ey+f=0

Для определения параметров d, e и f мы создадим отдельный массив A из точек p1, p2 и p3, дополняя его единицами, чтобы создать квадратную матрицу. Т.к. мы ищем три параметра, то наша матрица A должна иметь форму (3, 3).

Т.к. в квадратах x и y нет дополнительных параметров, то наше выражение можно переписать следующим образом:

x2+y2+dx+ey+f=0

dx+ey+f=−( x2+y2)

Далее все происходит по аналогии: матрица A состоит из значений x и y со столбцом состоящим из единиц, а наша матрица B будет отрицанием суммы квадратов x и y. Для пояснения пример для TensorFlow:



import tensorflow as tf

# просто пояснение, никакого смысла
# в переменной points нет
points = tf.constant([[2, 1],
                 [0, 5],
                 [-1, 2]], dtype=tf.float64)

# матрица А
A = tf.constant([
    [2, 1, 1],
    [0, 5, 1],
    [-1, 2, 1]
], dtype='float64')

# матрица B
B = -tf.constant([[5], [25], [5]], dtype=tf.float64)

Затем мы используем tf.matrix_solve, чтобы найти массив X, который является параметрами нашего уравнения. Запустив следующий код в сеансе, мы получим три значения: D, E и F:


X = tf.matrix_solve(A, B)

with tf.Session() as session:
    result = session.run(X)
    D, E, F = result.flatten()

    print(u"Искомое уравнение: x**2 + y**2 + {D}x + {E}y + {F} = 0".format(**locals()))
Давайте проверим наш результат:
TensorFlow-Linear-Equations-Example-2-Result.png

Давайте проверим наш результат:


import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-2.0, 4.0, 100)
y = np.linspace(0.0, 6.0, 100)
X, Y = np.meshgrid(x,y)
F = X**2 + Y**2 -2.0*X -6.0*Y + 5.0

fig = plt.figure(figsize=(8,6))
plt.contour(X,Y,F,[0])
plt.plot([2,0,-1], [1,5,2], 'ro')
plt.gca().set_aspect('equal')
plt.grid()
plt.show()

Результатом будет наша замечательная окружность с обозначением на ней наших точек:

TensorFlow-Linear-Equations-Example-2-Result-Graph.png

Для записи уравнений используйте MathJax. Посмотреть код формулы можно кликнув правой кнопкой мыши на формулу (Show Math As -> TeX commands)

9 апреля 2025
Облако как конструктор: разворачиваем типовой проект с готовыми компонентами
Современные облачные платформы — это не просто набор виртуальных машин, а целая экосистема сервисов. K2 Cloud не исключение, и мы постоянно развиваем портфолио готовых сервисов, добавляем новые возможности. В этой статье разберём, как можно быстро развернуть типовой проект в облаке на примере Nextcloud — популярного open-source решения для хранения файлов и совместной работы с ними.
1 минута
499
20 февраля 2025
Модели облачных услуг: IaaS, PaaS и SaaS
Гид по основным услугам в публичном облаке, их преимуществам и разделению ответственности между провайдером и клиентом.
2 минуты
1938
30 января 2025
Оптимизация облака для 1С

Чаще всего для проверки производительности систем 1С компании используют тест Гилева, который не всегда отвечает запросам бизнеса. Он не способен дать объективную оценку, подходит ли конкретное железо под поставленные задачи.

В статье подробно рассказываем, какие существуют альтернативные методы тестирования производительности 1С в облаке.

1 минута
369
18 декабря 2024
Всепроникающая безопасность: какие облачные ИБ-решения будут больше всего востребованы и почему
Облачные решения продолжают активно осваивать новые ИТ-территории, и сфера кибербезопасности — не исключение. Облачным провайдерам есть что предложить в самых разных сегментах — от комплексной защиты бизнес-сред до отдельных кастомизированных продуктов для решения конкретных задач ИБ. О технологиях, на которые будет расти спрос до 2030 года, в материале специального проекта K2 Cloud и CNews.ru.
1 минута
442
9 декабря 2024
Облачные тренды-2030: как будет меняться ИТ-климат
Вычислительные ресурсы предоставляются в аренду, разработка унифицируется, а рутинные задачи делегируются ИИ. В целях оптимизации компании всё чаще предпочитают использовать серверы и процессоры только по мере надобности и заменять собственную инфраструктуру на облачные платформы. Про главные тренды в ИТ последних и предстоящих лет рассказали в статье специального проекта K2 Cloud и CNews.ru.
1 минута
555
5 ноября 2024
Облачные тренды 2030: специальный проект К2 Cloud и CNews
Как изменится ИТ-климат в ближайшие годы? Что станет драйверами развития облачных технологий? Какие мировые тренды будут актуальны в России? К2 Cloud проанализировал облачные тренды по направлениям от разработки до ИБ, которые будут актуальны до 2030 года на российском и мировом рынке, и рассказал об этом в большом специальном проекте на CNews.
1 минута
698
scrollup