什么是人工智能
人工智能就是让机器能像人一样进行思考,那么如何做到。一句话就是找规律,从大量的数据中寻找规律,然后通过这个寻找到的规律进行预测,所以影响人工智能发展的有三大要素:数据 算法 算力 人工智能的三大方向:计算机视觉、自然语言处理、机器人
CPU 和 GPU
CPU 可以理解为一个超人什么都能干,但是有个致命的缺点并行度不高。GPU 刚好相反,他不能进行复杂的逻辑运算,但是却有着极强的并发计算的能力。GPU 在游戏领域用的比较多,上面提到人工智能需要找规律,找规律的过程中就需要大量的运算,而 GPU 刚好符合这一特征。所以在一定程度上来说游戏的发展也间接促进了人工智能的发展
人工智能、机器学习、深度学习
人工智能包含机器学习 机器学习又包含深度学习
有监督学习 无监督学习
有监督学习指的是提前告诉计算机结果然后让计算机从中寻找规律 如:给计算机喂一些猫的图片然后计算器通过不断地学习该图片的特征。然后当计算机拿到有一张陌生的图片时候会从中提取特征来判断他是不是猫。无监督学习 只给计算机喂一些数据让计算机自动从中寻找规律
人工智能预测打车费用
让计算机预测打车费用逻辑 现在有一些打车费用的数据:
打车距离 | 打车费用 |
---|---|
1 | 10 |
2 | 12 |
3 | 14 |
4 | 16 |
5 | 18 |
任务:让计算机预测打车在 10 公里的时候费用是多少
加入打车费用于距离之间的关系为 y = w * x + b (w 为权重 b 为偏执)
让计算机求出 w 和 b 的值即可成功预测
思路:假设 w = 0.001 b = 0.001 依次把 w 和 b 向上 加一个值直到求得最小的值 那么如何让计算值知道预测的值和真实值之间的偏差?这里我们采用均方误差来进行计算公式如下:
dw 梯度:
db 梯度:
class CarFree:
def __init__(self, w, b):
self.w = w
self.b = b
def cal_result(self, x):
return np.dot(self.w, x) + self.b
def loss(self, y, z):
ret = z - y
return np.mean(ret * ret)
def update(self, dw, db, rate=0.001):
self.w = self.w - rate * dw
self.b = self.b - rate * db
def cal_dw_db(self, x, y, z):
# w的梯度
dw = np.mean((z - y) * x)
# b的梯度
db = np.mean(z - y)
return dw, db
def train(self, x, y, rate = 0.001):
## 开始训练
for i in range(5000):
z = self.cal_result(i)
loss = self.loss(y, z)
dw, db = self.cal_dw_db(x, y, z)
self.update(dw, db)
开始训练
def load_data():
## 准备数据集
data = np.array([
[1.0, 10.0], [2.0, 12.0],
[3.0, 14.0], [4.0, 16.0],
[5.0, 18.0]
])
ratio = 0.8
offset = int(data.shape[0] * ratio)
## 训练数据
train_data = data[:offset]
## 测试数据
test_data = data[offset:]
x_train_data = train_data[:, 0:1]
y_train_data = train_data[:, 1:2]
x_test_data = test_data[:, 0:1]
y_test_data = test_data[:, 1:2]
return x_train_data, y_train_data, x_test_data, y_test_data
x_train_data, y_train_data, x_test_data, y_test_data = load_data()
# 创建模型对象
myNet = CarFree(1, 1)
# 训练
myNet.train(x_train_data, y_train_data)
#预测测试数据
z = myNet.cal_result(x_test_data)
print('测试数据的预测值:', z)
# 评估测试数据
loss = myNet.loss(y_test_data, z)
print('测试数据的成本值:', loss)
print(myNet.b)
print(myNet.w)
7.999999999996891
2.000000000001066
可以看到经过 不断的训练 w 和 b 的值已经和真实的值已经是非常接近了
本文由mdnice多平台发布