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

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

Запись от Konst2016 размещена 14.08.2021 в 12:24
Показов 2634 Комментарии 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
Просмотров: 601
Размер:	21.0 Кб
ID:	7082
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты 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) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru