【深度学习】(一)机器学习基础(代码实现)

简介: AI人工智能包含的内容十分广泛,对于图像处理而言,机器学习、深度学习或者计算机视觉主要关注图像识别这部分内容,所以重点学习CNN卷积神经网络。今天先从上古时期的机器学习开始。

开发环境:Python3.9+Tensorflow2.9.1

Tensorflow1.0到Tensorflow2.0还是有很多不同的地方,踩了不少坑🤣

以一个经典的异或问题为例,构建了两层神经网络,输入为[0, 0], [0, 1], [1, 0], [1, 1],输出为[0, 1, 1, 0]。

无论神经网络简单还是复杂,机器学习都包括训练train和测试predict两个过程。

首先采用不调Tensorflow库,可以深入了解计算过程,代码如下:

#coding:utf-8importnumpyasnp# 激活函数deftanh(x):  
returnnp.tanh(x)  
deftanh_deriv(x):  
return1.0-np.tanh(x)**2deflogistic(x):  
return1/(1+np.exp(-x))  
deflogistic_derivative(x):  
returnlogistic(x)*(1-logistic(x))  
# NeuralNetwork 神经网络算法  classNeuralNetwork:  
#初始化,layes表示的是一个list,eg[10,10,3]表示第一层10个神经元,第二层10个神经元,第三层3个神经元  def__init__(self, layers, activation='tanh'):  
"""         :param layers: A list containing the number of units in each layer.         Should be at least two values         :param activation: The activation function to be used. Can be         "logistic" or "tanh"         """ifactivation=='logistic':  
self.activation=logisticself.activation_deriv=logistic_derivativeelifactivation=='tanh':  
self.activation=tanhself.activation_deriv=tanh_derivself.weights= []  
# 循环从1开始,相当于以第二层为基准,进行权重的初始化  foriinrange(1, len(layers) -1):  
#对当前神经节点的前驱赋值  self.weights.append((2*np.random.random((layers[i-1] +1, layers[i] +1))-1)*0.25)  
#对当前神经节点的后继赋值  self.weights.append((2*np.random.random((layers[i] +1, layers[i+1]))-1)*0.25)  
# 训练函数,X矩阵,每行是一个实例 ,y是每个实例对应的结果,learning_rate 学习率,   # epochs,表示抽样的方法对神经网络进行更新的最大次数  deffit(self, X, y, learning_rate=0.1, epochs=10000):  
X=np.atleast_2d(X) #确定X至少是二维的数据  temp=np.ones([X.shape[0], X.shape[1]+1]) #初始化矩阵  temp[:, 0:-1] =X# adding the bias unit to the input layer  X=tempy=np.array(y) #把list转换成array的形式  forkinrange(epochs):  
#随机选取一行,对神经网络进行更新  i=np.random.randint(X.shape[0])   
a= [X[i]]  
#完成所有正向的更新  forlinrange(len(self.weights)):  
a.append(self.activation(np.dot(a[l], self.weights[l])))  
#  error=y[i] -a[-1]  
deltas= [error*self.activation_deriv(a[-1])]  
ifk%1000==0:
print(k,'...',error*error*100)
#开始反向计算误差,更新权重  forlinrange(len(a) -2, 0, -1): # we need to begin at the second to last layer  deltas.append(deltas[-1].dot(self.weights[l].T)*self.activation_deriv(a[l]))  
deltas.reverse()  
foriinrange(len(self.weights)):  
layer=np.atleast_2d(a[i])  
delta=np.atleast_2d(deltas[i])  
self.weights[i] +=learning_rate*layer.T.dot(delta)  
# 预测函数              defpredict(self, x):  
x=np.array(x)  
temp=np.ones(x.shape[0]+1)  
temp[0:-1] =xa=tempforlinrange(0, len(self.weights)):  
a=self.activation(np.dot(a, self.weights[l]))  
returnaif__name__=='__main__':        
nn=NeuralNetwork([2,2,1], 'tanh')  
X=np.array([[0, 0], [0, 1], [1, 0], [1, 1]])  
y=np.array([0, 1, 1, 0])  
nn.fit(X, y)  
foriin [[0, 0], [0, 1], [1, 0], [1,1]]:  
print(i,nn.predict(i)) 
```
采用Tensorflow库,工程实现过程中必然要在前人开发的框架上进行二次开发或者直接使用,代码如下:```python# 两层感知机+BP算法 完美解决异或问题importtensorflowastfimportnumpyasnp# tf.random.set_seed(777)  # for reproducibilitylearning_rate=0.1# 输入x_data= [[0, 0],
          [0, 1],
          [1, 0],
          [1, 1]]
y_data= [[0],
          [1],
          [1],
          [0]]
x_data=np.array(x_data, dtype=np.float32)
y_data=np.array(y_data, dtype=np.float32)
# 占位符tf.compat.v1.disable_eager_execution()
X=tf.compat.v1.placeholder(tf.float32, [None, 2])  # 2维Y=tf.compat.v1.placeholder(tf.float32, [None, 1])  # 1维# 权重W1=tf.Variable(tf.random.normal([2, 2]), name='weight1')
b1=tf.Variable(tf.random.normal([2]), name='bias1')
layer1=tf.sigmoid(tf.matmul(X, W1) +b1)
W2=tf.Variable(tf.random.normal([2, 1]), name='weight2')
b2=tf.Variable(tf.random.normal([1]), name='bias2')
hypothesis=tf.sigmoid(tf.matmul(layer1, W2) +b2)
# cost/loss functioncost=-tf.reduce_mean(Y*tf.compat.v1.log(hypothesis) + (1-Y) *tf.compat.v1.log(1-hypothesis))
train=tf.compat.v1.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(cost)
# Accuracy computation# True if hypothesis>0.5 else Falsepredicted=tf.cast(hypothesis>0.5, dtype=tf.float32)
accuracy=tf.reduce_mean(tf.cast(tf.equal(predicted, Y), dtype=tf.float32))
# Launch graphwithtf.compat.v1.Session() assess:
# Initialize TensorFlow variablessess.run(tf.compat.v1.global_variables_initializer())
forstepinrange(10001):
sess.run(train, feed_dict={X: x_data, Y: y_data})
ifstep%100==0:
print(step, sess.run(cost, feed_dict={
X: x_data, Y: y_data}), sess.run([W1, W2]))
# Accuracy reporth, c, a=sess.run([hypothesis, predicted, accuracy],
feed_dict={X: x_data, Y: y_data})
print("\nHypothesis: ", h, "\nCorrect: ", c, "\nAccuracy: ", a)
目录
相关文章
|
2月前
|
机器学习/深度学习 数据采集 监控
深度学习中模型训练的过拟合与欠拟合问题
在机器学习和深度学习中,过拟合和欠拟合是影响模型泛化能力的两大常见问题。过拟合指模型在训练数据上表现优异但在新数据上表现差,通常由模型复杂度过高、数据不足或质量差引起;欠拟合则指模型未能充分学习数据中的模式,导致训练和测试数据上的表现都不佳。解决这些问题需要通过调整模型结构、优化算法及数据处理方法来找到平衡点,如使用正则化、Dropout、早停法、数据增强等技术防止过拟合,增加模型复杂度和特征选择以避免欠拟合,从而提升模型的泛化性能。
|
27天前
|
机器学习/深度学习 人工智能 开发者
DeepSeek安装部署指南,基于阿里云PAI零代码,小白也能轻松搞定!
阿里云PAI平台支持零代码一键部署DeepSeek-V3和DeepSeek-R1大模型,用户可轻松实现从训练到部署再到推理的全流程。通过PAI Model Gallery,开发者只需简单几步即可完成模型部署,享受高效便捷的AI开发体验。具体步骤包括:开通PAI服务、进入控制台选择模型、一键部署并获取调用信息。整个过程简单快捷,极大降低了使用门槛。
1031 43
|
20天前
|
机器学习/深度学习 人工智能 开发者
DeepSeek服务器繁忙?拒绝稍后再试!基于阿里云PAI实现0代码一键部署DeepSeek-V3和DeepSeek-R1大模型
阿里云PAI平台支持零代码一键部署DeepSeek-V3和DeepSeek-R1大模型,用户可轻松实现从训练到部署再到推理的全流程。通过PAI Model Gallery,开发者只需简单几步即可完成模型部署,享受高效便捷的AI开发体验。具体步骤包括开通PAI服务、进入控制台选择模型、一键部署并获取调用信息。整个过程无需编写代码,极大简化了模型应用的门槛。
205 7
|
3月前
|
机器学习/深度学习 人工智能 算法
探索机器学习:从线性回归到深度学习
本文将带领读者从基础的线性回归模型开始,逐步深入到复杂的深度学习网络。我们将通过代码示例,展示如何实现这些算法,并解释其背后的数学原理。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和知识。让我们一起踏上这段激动人心的旅程吧!
|
4月前
|
机器学习/深度学习 人工智能 TensorFlow
基于TensorFlow的深度学习模型训练与优化实战
基于TensorFlow的深度学习模型训练与优化实战
172 3
|
3月前
|
机器学习/深度学习 人工智能 算法
机器学习与深度学习:差异解析
机器学习与深度学习作为两大核心技术,各自拥有独特的魅力和应用价值。尽管它们紧密相连,但两者之间存在着显著的区别。本文将从定义、技术、数据需求、应用领域、模型复杂度以及计算资源等多个维度,对机器学习与深度学习进行深入对比,帮助您更好地理解它们之间的差异。
|
4月前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
194 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
4月前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
92 2
|
4月前
|
机器学习/深度学习 数据采集 人工智能
揭秘AI:机器学习的魔法与代码
【10月更文挑战第33天】本文将带你走进AI的世界,了解机器学习的原理和应用。我们将通过Python代码示例,展示如何实现一个简单的线性回归模型。无论你是AI新手还是有经验的开发者,这篇文章都会给你带来新的启示。让我们一起探索AI的奥秘吧!
|
4月前
|
机器学习/深度学习 自然语言处理 语音技术
探索机器学习中的深度学习模型:原理与应用
探索机器学习中的深度学习模型:原理与应用
105 0

热门文章

最新文章