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

简介: 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月前
|
机器学习/深度学习 人工智能 安全
探索AI的未来:从机器学习到深度学习
【10月更文挑战第28天】本文将带你走进AI的世界,从机器学习的基本概念到深度学习的复杂应用,我们将一起探索AI的未来。你将了解到AI如何改变我们的生活,以及它在未来可能带来的影响。无论你是AI专家还是初学者,这篇文章都将为你提供新的视角和思考。让我们一起探索AI的奥秘,看看它将如何塑造我们的未来。
76 3
|
17天前
|
机器学习/深度学习 人工智能 算法
探索机器学习:从线性回归到深度学习
本文将带领读者从基础的线性回归模型开始,逐步深入到复杂的深度学习网络。我们将通过代码示例,展示如何实现这些算法,并解释其背后的数学原理。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和知识。让我们一起踏上这段激动人心的旅程吧!
|
6天前
|
机器学习/深度学习 人工智能 算法
机器学习与深度学习:差异解析
机器学习与深度学习作为两大核心技术,各自拥有独特的魅力和应用价值。尽管它们紧密相连,但两者之间存在着显著的区别。本文将从定义、技术、数据需求、应用领域、模型复杂度以及计算资源等多个维度,对机器学习与深度学习进行深入对比,帮助您更好地理解它们之间的差异。
|
1月前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
88 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
47 2
|
1月前
|
机器学习/深度学习 数据采集 人工智能
揭秘AI:机器学习的魔法与代码
【10月更文挑战第33天】本文将带你走进AI的世界,了解机器学习的原理和应用。我们将通过Python代码示例,展示如何实现一个简单的线性回归模型。无论你是AI新手还是有经验的开发者,这篇文章都会给你带来新的启示。让我们一起探索AI的奥秘吧!
|
2月前
|
机器学习/深度学习
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
本文探讨了深度可分离卷积和空间可分离卷积,通过代码示例展示了它们在降低计算复杂性和提高效率方面的优势。
205 2
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
|
2月前
|
数据采集 移动开发 数据可视化
模型预测笔记(一):数据清洗分析及可视化、模型搭建、模型训练和预测代码一体化和对应结果展示(可作为baseline)
这篇文章介绍了数据清洗、分析、可视化、模型搭建、训练和预测的全过程,包括缺失值处理、异常值处理、特征选择、数据归一化等关键步骤,并展示了模型融合技术。
137 1
模型预测笔记(一):数据清洗分析及可视化、模型搭建、模型训练和预测代码一体化和对应结果展示(可作为baseline)
|
27天前
|
机器学习/深度学习 算法框架/工具 Python
深度学习的奥秘与实践:从理论到代码
本文将探索深度学习的世界,揭示其背后的原理,并分享如何将这些理论应用到实际编程中。我们将一起踏上一段旅程,从神经网络的基础概念出发,逐步深入到复杂的模型训练和优化技术。你将看到,即使是初学者,也可以实现自己的深度学习项目。
|
1月前
|
机器学习/深度学习 自然语言处理 语音技术
探索机器学习中的深度学习模型:原理与应用
探索机器学习中的深度学习模型:原理与应用
41 0