Форум программистов, компьютерный форум, киберфорум
Konst2016
Войти
Регистрация
Восстановить пароль

Основы пакета Theano

Запись от Konst2016 размещена 14.08.2021 в 12:24
Показов 2611 Комментарии 0

Здравствуйте!Хочу дать статью где тестировал фреймворк Theano.
Скачал так (старый)(через анаконду):
>python -m pip install theano=1.0.0.
У меня были установлены переменные среды для Cpp компиляторов, но их запуск давал ошибку.Надо было затирать переменные среды
такие, я код удалил из theano/configdefaults.py и вообще не надо писать в .theanorc, которая вычисляется как
import os;os.expanduser('~')->str/.theanorc.
Работает на символьном программировании.Может вычислять производные(градиеты).
Основы:
Пакет theano.tensor содержит наиболее часто употребляемые типы тензоров.
При несовпадении типов Theano выбросит исключение. Исправить
можно, передав конструктору обьекта function аргумент allow_input_downcast=True, показано в app3.py
В app4.py может работать оптимизатор.
theano - общая переменная. Theano Shared Variable.
Общие переменные, означающие, что этими переменными можно обмениваться и постоянно обновлять(!) значения в арифметическом процессе. определяется в том случае, когда веса и смещение, и будут необходимы такие переменные.
Показано в app5.py
Мы можем сбросить значение состояния, вызовите метод set_value.Показано в app.6.py:.
Посчитаем градиент для функции x**2 в точке 4.Показано в app7.py.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# app.py
import theano
from theano import tensor
 
 
"""
  Вычислим значение по точке 10
"""
a=tensor.lscalar()
 
exp=1+2*a+a**2
 
f=theano.function(inputs=[a], outputs=exp)
 
print('f(10)', f(10)) # 121
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# app2.py
import  matplotlib.pyplot as plt 
import theano
import theano.tensor as T
import numpy as np
 
"""
  Построим и сохраним график по точкам (от -10 до 10) для выражения exp
"""
 
a = T.lvector()
exp = 1 + 2 * a + a ** 2
f = theano.function(
    inputs=[a],
    outputs=exp
)
arg = np.arange(-10, 10) # шаг 1
res = f(arg)
plt.plot(arg, res, c='m', linewidth=3.)
plt.savefig('gr.png')
 
# На рис. 1
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import theano
import theano.tensor as T
import numpy as np
 
"""
  Сложим матрицу и вектор хотя они разные через аргумент allow_input_downcast=True
"""
 
x = T.dmatrix('x')
v = T.fvector('v')
 
z = v + x
 
f = theano.function(
    inputs=[x, v],
    outputs=z,
    allow_input_downcast=True
)
f_fail = theano.function(
    inputs=[x, v],
    outputs=z
)
print('f', f(np.ones((3, 4), dtype=float), np.ones((4,), dtype=float)))
"""
->f_fail [[2. 2. 2. 2.]
 [2. 2. 2. 2.]
 [2. 2. 2. 2.]]
 
"""
print(f_fail(np.ones((3, 4), dtype=float), np.ones((4,), dtype=float)))
"""
->v = T.fvector('v')
TensorType(float32, vector) cannot store a value of dtype float64 without risking loss of precision. 
If you do not mind this loss, you can: 1) explicitly cast your data to float32, or 2) 
set "allow_input_downcast=True" when calling "function". Value: "array([1., 1., 1., 1.])
"""
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#app4.py
import theano
import theano.tensor as T
import numpy as np
 
 
x = T.lscalar('x')
y = T.lscalar('y')
 
square = T.square(x + y) # сложение и возведение в квадрат
sqrt = T.sqrt(x + y) # сложение и корень
 
f = theano.function(
    inputs=[x, y],
    outputs=[square, sqrt]
)
print(f(5, 4))
 
print(f(2, 2))
"""
>>> [array(81), array(3.0)]
>>> [array(16), array(2.0)]
"""
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#app5.py
import theano
import theano.tensor as T
import numpy as np
 
 
state = theano.shared(0) # инициализируем
i = T.iscalar('i')
inc = theano.function([i], # вход
                      state, # выход
                      # обновим разделяемую переменную
                      updates=[(state, state+i)])
dec = theano.function([i],
                      state,
 
                     updates=[(state, state-i)]
 
print('inc(1)', inc(1))
print('state.get_value()', state.get_value())
print('inc(1)', inc(1))
print('state.get_value()', state.get_value())
print('inc(1)', inc(1))
print('state.get_value()', state.get_value())                       
"""
->
inc(1) 0
state.get_value() 1
inc(1) 1
state.get_value() 2:
inc(1) 2
state.get_value() 3
"""
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#app6.py
import theano
import theano.tensor as T
import numpy as np
 
 
state = theano.shared(0) # инициализируем
i = T.iscalar('i')
acc = theano.function([i], # вход
                      state, # выход
                      # обновим переменную state
                      updates=[(state, state+i)])
dec = theano.function([i],
                      state,
                      updates=[(state, state-i)])
state.set_value(-1)
acc(3)
print(state.get_value())
"""
->
2
""")
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# app6.py
import numpy
import theano
import theano.tensor as T
from theano import pp
 
"""
  Посчитаем градиент для функции x**2 в точке 4
"""
 
x = T.dscalar('x')
y = x ** 2
gy = T.grad(y, x)
print(pp(gy))  # отпечатаем градиент
# ->'((fill((x ** TensorConstant{2}), TensorConstant{1.0}) * TensorConstant{2}) * (x ** (TensorConstant{2} - TensorConstant{1})))'
f = theano.function([x], gy)
print('f(4)', f(4))
# -> (8.0)
Рис. 1.
Нажмите на изображение для увеличения
Название: gr.png
Просмотров: 597
Размер:	21.0 Кб
ID:	7082
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru