import numpy as np
import theano.tensor as T
import theano
from theano import function
import matplotlib.pyplot as plt
class Layer(object):
def __init__(self,inputs,in_size,out_size,activation_function=None):
#权重: 平均值为0 方差为1 行数为in_size 列数为out_size
self.W=theano.shared(np.random.normal(0,1,(in_size,out_size)))
#bias
self.b=theano.shared(np.zeros((out_size,))+0.1)
#乘法加bias
self.Wx_plus_b=T.dot(inputs,self.W)+self.b#dot乘法
#激励函数
self.activation_function=activation_function
#默认为None,否则进行激活
if activation_function is None:
self.outputs=self.Wx_plus_b
else:
self.outputs=self.activation_function(self.Wx_plus_b)
#回归神经网络 Regression
#步骤1:制造虚拟数据
x_data=np.linspace(-1,1,100)[:,np.newaxis]#100个点进行训练
noise=np.random.normal(0,0.05,x_data.shape)
y_data=np.square(x_data)-0.1+noise#y=x^2-0.1
#一元二次散点图
plt.scatter(x_data,y_data)
plt.show()
#步骤2:定义输入和神经元
x=T.dmatrix('x')#d代表64位float类型
y=T.dmatrix('y')
#增加层数
L1=Layer(x,1,10,T.nnet.relu)
L2=Layer(L1.outputs,10,1,None)
#步骤3:计算误差与梯度下降更新
#误差为预测值与真实值差别
cost=T.mean(T.square(L2.outputs-y))#求平均误差
#梯度下降
gW1,gb1,gW2,gb2=T.grad(cost,[L1.W,L1.b,L2.W,L2.b])#权重和bias
#学习效率
learning_rate=0.05
#更新四个神经网络的参数
train=theano.function(
inputs=[x,y],
outputs=cost,
updates=[(L1.W,L1.W-learning_rate*gW1),
(L1.b,L1.b-learning_rate*gb1),
(L2.W,L2.W-learning_rate*gW2),
(L2.b,L2.b-learning_rate*gb2)
]
)
#步骤4:预测结果
predict=theano.function(inputs=[x],outputs=L2.outputs)
for i in range(1000):
err=train(x_data,y_data)#误差
#每隔100步输出err
if i % 100==0:
print(err)
0.47319827005737614 0.012205626040705037 0.00751665467921436 0.00562511127422009 0.004310605273226868 0.003447855699296902 0.002931589214229289 0.0026120026531145256 0.002402182708309157 0.002271440180430362
算法:Theano是适用于定义、优化、求值等,特别适合搭建机器学习框架。
链接:https://mofanpy.com/
本文分享自 图像处理与模式识别研究所 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!