优达学城深度学习之五——卷积神经网络代码实现及实战演练

简介: 优达学城深度学习之五——卷积神经网络代码实现及实战演练

梯度下降算法推导与实现


df5a6f8a7384c8e0fdc21d18573f2087.jpg

importmatplotlib.pyplotaspltimportnumpyasnpimportpandasaspd#Some helper functions for plotting and drawing linesdefplot_points(X, y):
admitted=X[np.argwhere(y==1)]
rejected=X[np.argwhere(y==0)]
plt.scatter([s[0][0] forsinrejected], [s[0][1] forsinrejected], s=25, color='blue', edgecolor='k')
plt.scatter([s[0][0] forsinadmitted], [s[0][1] forsinadmitted], s=25, color='red', edgecolor='k')
defdisplay(m, b, color='g--'):
plt.xlim(-0.05,1.05)
plt.ylim(-0.05,1.05)
x=np.arange(-10, 10, 0.1)
plt.plot(x, m*x+b, color)
#读取与绘制数据data=pd.read_csv('data.csv', header=None)
X=np.array(data[[0,1]])
y=np.array(data[2])
plot_points(X,y)
plt.show()
# Implement the following functions# Activation (sigmoid) functiondefsigmoid(x):
return1/(1+np.exp(-x))
# Output (prediction) formuladefoutput_formula(features, weights, bias):
sigmoid(np.dot(features, weights) +bias)
# Error (log-loss) formuladeferror_formula(y, output):
return-y*np.log(output) - (1-y) *np.log(1-output)
# Gradient descent stepdefupdate_weights(x, y, weights, bias, learnrate):
output=output_formula(x, weights, bias)
d_error=-(y-output)
weights-=learnrate*d_error*xbias-=learnrate*d_errorreturnweights, biasnp.random.seed(44)
epochs=100learnrate=0.01deftrain(features, targets, epochs, learnrate, graph_lines=False):
errors= []
n_records, n_features=features.shapelast_loss=Noneweights=np.random.normal(scale=1/n_features**.5, size=n_features)
bias=0foreinrange(epochs):
del_w=np.zeros(weights.shape)
forx, yinzip(features, targets):
output=output_formula(x, weights, bias)
error=error_formula(y, output)
weights, bias=update_weights(x, y, weights, bias, learnrate)
# Printing out the log-loss error on the training setout=output_formula(features, weights, bias)
loss=np.mean(error_formula(targets, out))
errors.append(loss)
ife% (epochs/10) ==0:
print("\n========== Epoch", e,"==========")
iflast_lossandlast_loss<loss:
print("Train loss: ", loss, "  WARNING - Loss Increasing")
else:
print("Train loss: ", loss)
last_loss=losspredictions=out>0.5accuracy=np.mean(predictions==targets)
print("Accuracy: ", accuracy)
ifgraph_linesande% (epochs/100) ==0:
display(-weights[0]/weights[1], -bias/weights[1])
# Plotting the solution boundaryplt.title("Solution boundary")
display(-weights[0]/weights[1], -bias/weights[1], 'black')
# Plotting the dataplot_points(features, targets)
plt.show()
# Plotting the errorplt.title("Error Plot")
plt.xlabel('Number of epochs')
plt.ylabel('Error')
plt.plot(errors)
plt.show()
#训练算法train(X, y, epochs, learnrate, True)

反向传播


反向传播流程如下:

  • 进行前向反馈运算。
  • 将模型的输出与期望的输出进行比较。
  • 计算误差。
  • 向后运行前向反馈运算(反向传播),将误差分散到每个权重上。
  • 更新权重,并获得更好的模型。
  • 继续此流程,直到获得很好的模型。

2c5d8b5be881dcae483157006a54dc71.jpg

实战演练:利用神经网络来预测学生录取情况


数据集来源: http://www.ats.ucla.edu/

# Importing pandas and numpyimportpandasaspdimportnumpyasnp# Reading the csv file into a pandas DataFramedata=pd.read_csv('student_data.csv')
# Printing out the first 10 rows of our datadata[:10]
#绘制数据# Importing matplotlibimportmatplotlib.pyplotasplt%matplotlibinline# Function to help us plotdefplot_points(data):
X=np.array(data[["gre","gpa"]])
y=np.array(data["admit"])
admitted=X[np.argwhere(y==1)]
rejected=X[np.argwhere(y==0)]
plt.scatter([s[0][0] forsinrejected], [s[0][1] forsinrejected], s=25, color='red', edgecolor='k')
plt.scatter([s[0][0] forsinadmitted], [s[0][1] forsinadmitted], s=25, color='cyan', edgecolor='k')
plt.xlabel('Test (GRE)')
plt.ylabel('Grades (GPA)')
# Plotting the pointsplot_points(data)
plt.show()
# Separating the ranksdata_rank1=data[data["rank"]==1]
data_rank2=data[data["rank"]==2]
data_rank3=data[data["rank"]==3]
data_rank4=data[data["rank"]==4]
# Plotting the graphsplot_points(data_rank1)
plt.title("Rank 1")
plt.show()
plot_points(data_rank2)
plt.title("Rank 2")
plt.show()
plot_points(data_rank3)
plt.title("Rank 3")
plt.show()
plot_points(data_rank4)
plt.title("Rank 4")
plt.show()
#将评级进行one-shot编码# TODO:  Make dummy variables for rankone_hot_data=pd.concat([data, pd.get_dummies(data['rank'], prefix='rank')], axis=1)
# TODO: Drop the previous rank columnone_hot_data=one_hot_data.drop('rank', axis=1)
# Print the first 10 rows of our dataone_hot_data[:10]
#缩放数据# Making a copy of our dataprocessed_data=one_hot_data[:]
# TODO: Scale the columnsprocessed_data['gre']=processed_data['gre']/800processed_data['gpa']=processed_data['gpa']/4.0# Printing the first 10 rows of our procesed dataprocessed_data[:10]
#将数据分成训练集和测试集sample=np.random.choice(processed_data.index, size=int(len(processed_data)*0.9), replace=False)
train_data, test_data=processed_data.iloc[sample], processed_data.drop(sample)
print("Number of training samples is", len(train_data))
print("Number of testing samples is", len(test_data))
print(train_data[:10])
print(test_data[:10])
#将数据分成特征和目标features=train_data.drop('admit', axis=1)
targets=train_data['admit']
features_test=test_data.drop('admit', axis=1)
targets_test=test_data['admit']
print(features[:10])
print(targets[:10])
#训练二层神经网络Activation (sigmoid) functiondefsigmoid(x):
return1/ (1+np.exp(-x))
defsigmoid_prime(x):
returnsigmoid(x) * (1-sigmoid(x))
deferror_formula(y, output):
return-y*np.log(output) - (1-y) *np.log(1-output)
#误差反向传播# TODO: Write the error term formuladeferror_term_formula(y, output):
return (y-output)*sigmoid_prime(x)
deferror_term_formula(x, y, output):
return (y-output) *output* (1-output)
# Neural Network hyperparametersepochs=1000learnrate=0.5# Training functiondeftrain_nn(features, targets, epochs, learnrate):
# Use to same seed to make debugging easiernp.random.seed(42)
n_records, n_features=features.shapelast_loss=None# Initialize weightsweights=np.random.normal(scale=1/n_features**.5, size=n_features)
foreinrange(epochs):
del_w=np.zeros(weights.shape)
forx, yinzip(features.values, targets):
# Loop through all records, x is the input, y is the target# Activation of the output unit#   Notice we multiply the inputs and the weights here #   rather than storing h as a separate variable output=sigmoid(np.dot(x, weights))
# The error, the target minus the network outputerror=error_formula(y, output)
# The error term#   Notice we calulate f'(h) here instead of defining a separate#   sigmoid_prime function. This just makes it faster because we#   can re-use the result of the sigmoid function stored in#   the output variableerror_term=error_term_formula(x,y, output)
# The gradient descent step, the error times the gradient times the inputsdel_w+=error_term*x# Update the weights here. The learning rate times the # change in weights, divided by the number of records to averageweights+=learnrate*del_w/n_records# Printing out the error on the training setife% (epochs/10) ==0:
out=sigmoid(np.dot(features, weights))
loss=np.mean((out-targets) **2)
print("Epoch:", e)
iflast_lossandlast_loss<loss:
print("Train loss: ", loss, "  WARNING - Loss Increasing")
else:
print("Train loss: ", loss)
last_loss=lossprint("=========")
print("Finished training!")
returnweightsweights=train_nn(features, targets, epochs, learnrate)
#计算测试数据的准确度# Calculate accuracy on test datates_out=sigmoid(np.dot(features_test, weights))
predictions=tes_out>0.5accuracy=np.mean(predictions==targets_test)
print("Prediction accuracy: {:.3f}".format(accuracy))
相关文章
用MASM32按Time Protocol(RFC868)协议编写网络对时程序中的一些有用的函数代码
用MASM32按Time Protocol(RFC868)协议编写网络对时程序中的一些有用的函数代码
|
3月前
|
机器学习/深度学习 网络架构 计算机视觉
目标检测笔记(一):不同模型的网络架构介绍和代码
这篇文章介绍了ShuffleNetV2网络架构及其代码实现,包括模型结构、代码细节和不同版本的模型。ShuffleNetV2是一个高效的卷积神经网络,适用于深度学习中的目标检测任务。
135 1
目标检测笔记(一):不同模型的网络架构介绍和代码
|
3月前
|
机器学习/深度学习 PyTorch 算法框架/工具
揭秘深度学习中的微调难题:如何运用弹性权重巩固(EWC)策略巧妙应对灾难性遗忘,附带实战代码详解助你轻松掌握技巧
【10月更文挑战第1天】深度学习中,模型微调虽能提升性能,但常导致“灾难性遗忘”,即模型在新任务上训练后遗忘旧知识。本文介绍弹性权重巩固(EWC)方法,通过在损失函数中加入正则项来惩罚对重要参数的更改,从而缓解此问题。提供了一个基于PyTorch的实现示例,展示如何在训练过程中引入EWC损失,适用于终身学习和在线学习等场景。
202 4
揭秘深度学习中的微调难题:如何运用弹性权重巩固(EWC)策略巧妙应对灾难性遗忘,附带实战代码详解助你轻松掌握技巧
|
2月前
|
机器学习/深度学习 人工智能 TensorFlow
基于TensorFlow的深度学习模型训练与优化实战
基于TensorFlow的深度学习模型训练与优化实战
130 0
|
3月前
|
机器学习/深度学习 人工智能 算法
揭开深度学习与传统机器学习的神秘面纱:从理论差异到实战代码详解两者间的选择与应用策略全面解析
【10月更文挑战第10天】本文探讨了深度学习与传统机器学习的区别,通过图像识别和语音处理等领域的应用案例,展示了深度学习在自动特征学习和处理大规模数据方面的优势。文中还提供了一个Python代码示例,使用TensorFlow构建多层感知器(MLP)并与Scikit-learn中的逻辑回归模型进行对比,进一步说明了两者的不同特点。
127 2
|
4月前
|
安全 C#
某网络硬盘网站被植入传播Trojan.DL.Inject.xz等的代码
某网络硬盘网站被植入传播Trojan.DL.Inject.xz等的代码
|
3月前
|
机器学习/深度学习 编解码 算法
【深度学习】经典的深度学习模型-01 开山之作:CNN卷积神经网络LeNet-5
【深度学习】经典的深度学习模型-01 开山之作:CNN卷积神经网络LeNet-5
75 0
完成切换网络+修改网络连接图标提示的代码框架
完成切换网络+修改网络连接图标提示的代码框架
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
深入理解深度学习:从基础到实战
【9月更文挑战第23天】本文将带你走进深度学习的世界,从基本概念到实际应用,一步步揭示深度学习的神秘面纱。我们将通过实例和代码示例,帮助你理解和掌握深度学习的核心技术和方法。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的参考和启示。让我们一起探索深度学习的奥秘吧!
52 0
|
15天前
|
机器学习/深度学习 算法 计算机视觉
基于CNN卷积神经网络的金融数据预测matlab仿真,对比BP,RBF,LSTM
本项目基于MATLAB2022A,利用CNN卷积神经网络对金融数据进行预测,并与BP、RBF和LSTM网络对比。核心程序通过处理历史价格数据,训练并测试各模型,展示预测结果及误差分析。CNN通过卷积层捕捉局部特征,BP网络学习非线性映射,RBF网络进行局部逼近,LSTM解决长序列预测中的梯度问题。实验结果表明各模型在金融数据预测中的表现差异。

热门文章

最新文章