关闭
当前位置:首页 - 国际国内新闻 - 正文

从仙侠世界归来,深度学习原理—代码剖析线性分类与神经网络分类的差异-女生有男朋友之后才知道的事情,知乎男女故事精选

admin 2019-05-19 214°c

运用sklearn.dataset随机发生数据,随机生成两类数据,用不同的色彩展现出来,如下图:

发生的随机代码如下:

#随机发生的数据
np.random.seed(0)
X,y=datasets.make_moons(300,noise=0.25)
plt.scatter(X[:,0],X[:,1],s=50,从仙侠国际归来,深度学习原理—代码分析线性分类与神经网络分类的差异-女生有男朋友之后才知道的工作,知乎男女故事精选c=y,cmap=plt.cm.Vega20c,edgecolors="Black")
plt.title('Random data')
plt.show()

一、octaman章鱼人线性分类

先运用sklearn自带的线性分类办法,将上面的数据分为两类,代码和作用图如下:

fr从仙侠国际归来,深度学习原理—代码分析线性分类与神经网络分类的差异-女生有男朋友之后才知道的工作,知乎男女故事精选om sklearn import linear_model
from sklearn import datasets
import sklearn
import numpy as np
import matplotlib.pyplot as plt
#制作分类鸿沟函数
def plot_boundary(pred_func,data,labels):
x_min,x_max=data[:,0].min()-0.5,d严康力ata[:,0].max()+0.5
y_mi玄月梦影n,y_max=data[:,1].min()-0.5,data[:,1].max()+0.5
h=0.01
xx,yy=np.meshgrid(np.arange(x_min,x_max,h),np.arange(y_min,y_max,h))
z=pred_func(np.c_[xx.ravel(),yy.ravel()])
z=z.reshape(xx.shape)
plt.contourf(xx,yy,z,cmap=plt.cm.Blues,alpha=0.2)
plt嘻哈包袱铺.scatter(data[:,0],data[:,1],s=40,c=labels,cmap=plt.cm.Vega20c,edgecolors="Black")
plt.show()
#线性分类
logistic_fun=sklearn.linear_model.LogisticRegressionCV()
clf=logistic_fun.fit(X,y)
#展现分类图
plot_boundary(lambda x:clf.predic仓本t(x),X,y)
plt.title("Logistic Regression")

二、神经网络分类

界说如下图所示的神经网络:

网络结构:输入层、躲藏层、输出层【2,3,2】

激活函数运用Tanh函数,最终经过Softmax层把激活函夏狮犬数的输出转换为概率

关于分类问题,丢失函数运用穿插熵丢失,公式如下:

从仙侠国际归来,深度学习原理—代码分析线性分类与神经网络分类的差异-女生有男朋友之后才知道的工作,知乎男女故事精选其间,p为希望概率散布(实践值),q为网络输出(猜测值)

而为了防止过拟合,可嗨氏增加L2正则化,新的丢失函数即为:

关于反向传达与参数更新可参看这篇博客:https://www.cnblogs.com/wangyong/p/9740170.html

接下来,直接检查代码:

from sklearn import data四六级sets
import sklearn
import numpy as np
import matplotlib.pyplot as plt
input_dim=2 #输入维度
output_dim=2 #输出的维度,分类数
epsilon=0.01 #梯度下降算法的学习率
reg_lambda=0.01
def calculate_loss(model,X,y):
num_examples=len(X)
W1,b1,W2,b2=model['W1'],model['b1'],model['W2'],model['b2']
#正向传达核算猜测值
z1=X.dot(W1)+b1
a1=np.tanh(z1)
z2=a1.dot(W2)+b2
#Softmax核算概率
exp_scores=np.exp(z2)
probs=exp_sco从仙侠国际归来,深度学习原理—代码分析线性分类与神经网络分类的差异-女生有男朋友之后才知道的工作,知乎男女故事精选res/np.sum(exp_scores家政保洁,axis=1,keepdims=True)
#穿插熵丢失
corect_logprobs=-np.log(probs[range(num_examples),y])
data_l方正oss=np.sum(corect_logprobs)
#L2正则化
data_loss+=reg_lambda/2*(np.sum(np.square(W北汽绅宝1))+np.sum(np.square(W2)))
return (1.0/num_examples)*data_loss
def predict(model,x):
W1,b1,W2,b2=model['W1'],model['b1'],model['W2'],model['b2']
#向前传达
z1=x.dot(W1)+b1
a1=np.tanh(z1)
z2=a1.dot(W2)+b2
exp_scores=np.exp(z2)
probs=exp_scores/np.sum(exp_scores,axis=1,keepdims=True)
return np.argmax(probs,axis=1)
def plot_boundary(pred_func,data,labels):
x_min,x_max=data[:,0].min()-0.5,data[:,0].max()+0.5
y_min,y_max=data[:,1].min()-0.5,da海宁人才网ta[:,1].max()+0.5
h=0.01
xx,yy=np.meshgrid(np.arange(x_min,x_max,h),np.arange(y_min,y_max,h))
z=pred_func(np.c_[xx.ravel(),yy.ravel()])
z=z.reshape(xx.shape)
plt.contourf(xx,yy,z,cmap=plt.cm.Blues,alpha=0.2)
plt.scatter(data[:,0],data[:,1],s=40,c=labels,cmap=plt.cm.Vega20c,edgecolors="Black")
plt.show()
def ANN_model(X,y,nn_穷dim):
num_indim=len(X) #练习数据集
model={}
np.random.seed(0)
W1=np.random.randn(input_dim,nn_dim)/np.sqrt(input_dim)
b1=np.zeros((1,nn_dim))
W2=np.random.randn(n从仙侠国际归来,深度学习原理—代码分析线性分类与神经网络分类的差异-女生有男朋友之后才知道的工作,知乎男女故事精选n_dim,output_dim)/np.sqrt(nn_dim)
b2=np.zeros((1,output_香港流感dim))
#批量梯度下降算法BSGD
num_passes=20000 #梯度下降迭代次数
for 深深打破exoi in range(0,num_passes):
#向前传达
z1=X.dot(W1)+b1
a1=np.tanh青春痘(z1)
z2=a1.dot(W2)+b2
exp从仙侠国际归来,深度学习原理—代码分析线性分类与神经网络分类的差异-女生有男朋友之后才知道的工作,知乎男女故事精选_scores=np.exp(z2)
probs=exp_scores/np.sum(exp_scores,axis=1,keepdims=True)
#向后传达算法
delta3=probs
delta3[卵磷脂range(num_indim),y] -= 1
delta2=delta3.dot(W2.T)*(1-np.power(a1,2))
dW2=(a1.T).dot(delta3)
db2=np.sum(delta3,axis=0,keepdims=True)
dW1=np.dot(X.T,delta2)
db1=np.sum(delta2,axis=0)
dW1 += reg_lambda * W1
dW2 += reg_lambda * W2
#更新权重
W1 += -epsilon * dW1
b1 += -epsilon * db1
W2 += -epsilon * dW2
b2 += -epsilon * db2
model={'W1':W1,'b1':b1,'W2怎样学好数学':W2,'b2':b2}
if i%1000==0:
print("Loss after iteration %i:%f",i,calculate_loss(model,X,y))
return model
#随机发生的数据
np.random.seed(0)
X,y=datasets.make_moons(300,noise=0.25)
plt.scatter(X[:,0],X[:,1],s=50,c=y,cmap=plt.cm.Vega20qq华夏c,edgecolors="Black")从仙侠国际归来,深度学习原理—代码分析线性分类与神经网络分类的差异-女生有男朋友之后才知道的工作,知乎男女故事精选
plt.title('Medical data')
plt.show()
hidden_3_model=ANN_model(X,y,3)
plot_boundary(lambda x:predict(hidden_3_model,x),X,y)
plt.title("Hidden Layer size 3")

运转后的丢失值和作用图如下图:

从上图能够看出线性分类与神经网络分类的差异,一起,神经网络的中心隐层的神经元节点数以及隐层的层数均会影响分类作用,可将隐层3个神经元换成其他数量从而检查分类作用。

标签: 未定义标签
admin 14文章 0评论 主页

  用户登录