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

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

Запись от Konst2016 размещена 14.08.2021 в 12:24
Показов 2581 Комментарии 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
Просмотров: 594
Размер:	21.0 Кб
ID:	7082
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru