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

简介: 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)
目录
相关文章
|
1天前
|
机器学习/深度学习 算法 数据可视化
深度学习代码通常包括以下几个主要部分
【5月更文挑战第11天】深度学习代码通常包括以下几个主要部分
3 1
|
2天前
|
机器学习/深度学习 IDE Serverless
通过阅读他人的代码是提高深度学习技能
【5月更文挑战第10天】通过阅读他人的代码是提高深度学习技能
9 4
|
3天前
|
机器学习/深度学习 算法 算法框架/工具
Python深度学习基于Tensorflow(5)机器学习基础
Python深度学习基于Tensorflow(5)机器学习基础
14 2
|
6天前
|
机器学习/深度学习 自然语言处理 算法
Python遗传算法GA对长短期记忆LSTM深度学习模型超参数调优分析司机数据|附数据代码
Python遗传算法GA对长短期记忆LSTM深度学习模型超参数调优分析司机数据|附数据代码
|
9天前
|
机器学习/深度学习 人工智能 算法
【AI 初识】讨论深度学习和机器学习之间的区别
【5月更文挑战第3天】【AI 初识】讨论深度学习和机器学习之间的区别
|
12天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习在图像识别中的应用与挑战探索机器学习中的自然语言处理技术
【4月更文挑战第30天】 随着人工智能技术的飞速发展,深度学习已经成为计算机视觉领域的核心动力。本文将探讨深度学习在图像识别任务中的关键技术、应用实例以及面临的主要挑战。我们将重点讨论卷积神经网络(CNN)的架构优化、数据增强技术以及迁移学习的策略,并通过具体案例分析其在医疗影像、自动驾驶和面部识别等领域的应用成效。同时,我们也将指出当前模型泛化能力不足、对抗性攻击以及算力资源需求等挑战,并提出潜在的解决方向。 【4月更文挑战第30天】 在人工智能领域,自然语言处理(NLP)是赋予机器理解和响应人类语言能力的关键技术。本文将深入探讨NLP的发展历程、核心技术及其在不同领域的应用案例。我们将从
|
12天前
|
机器学习/深度学习 传感器 自动驾驶
【Python机器学习专栏】深度学习在自动驾驶中的应用
【4月更文挑战第30天】本文探讨了深度学习在自动驾驶汽车中的应用及其对技术发展的推动。深度学习通过模拟神经网络处理数据,用于环境感知、决策规划和控制执行。在环境感知中,深度学习识别图像和雷达数据;在决策规划上,学习人类驾驶行为;在控制执行上,实现精确的车辆控制。尽管面临数据需求、可解释性和实时性挑战,但通过数据增强、规则集成和硬件加速等方法,深度学习将持续优化自动驾驶性能,并在安全性和可解释性上取得进步。
|
12天前
|
机器学习/深度学习 自然语言处理 PyTorch
【Python 机器学习专栏】自然语言处理中的深度学习应用
【4月更文挑战第30天】本文探讨了深度学习在自然语言处理(NLP)中的应用,包括文本分类、情感分析和机器翻译等任务。深度学习的优势在于自动特征学习、强大的表达能力和处理大规模数据的能力。常见模型如RNN、LSTM、GRU、CNN和注意力机制在NLP中发挥作用。Python的TensorFlow、PyTorch、NLTK和SpaCy等工具支持NLP研究。然而,数据稀缺、模型解释性和计算资源需求高等挑战仍待解决。随着技术进步,未来深度学习将进一步推动NLP发展,实现更智能的语言交互。
|
12天前
|
机器学习/深度学习 算法 算法框架/工具
【Python机器学习专栏】深度学习中的正则化与优化技术
【4月更文挑战第30天】本文探讨了深度学习中的正则化和优化技术,以提升模型的泛化能力和训练效率。正则化包括L1和L2正则化以及Dropout,防止过拟合。优化技术涵盖梯度下降法、动量法和Adam优化器,加速模型收敛。Python示例展示了如何在Keras中应用这些技术,如L2正则化、Dropout及Adam优化器。
|
2月前
|
机器学习/深度学习 存储 搜索推荐
利用机器学习算法改善电商推荐系统的效率
电商行业日益竞争激烈,提升用户体验成为关键。本文将探讨如何利用机器学习算法优化电商推荐系统,通过分析用户行为数据和商品信息,实现个性化推荐,从而提高推荐效率和准确性。