1.导航
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 人工智能实战2019 |
这个作业的要求在哪里 | 这里 |
我在这个课程的目标是 | 理解并能应用一些常用的人工智能相关知识 |
这个作业在哪个具体方面帮助我实现目标 | 学会使用sigmoid激活函数和二分类交叉熵函损失数 |
2.作业内容
训练一个逻辑与门和逻辑或门
3. 代码实现
import numpy as np
np.random.seed(42)
X_and = np.array([[0, 0],[0, 1],[1, 0],[1, 1]])
y_and = np.array([0, 0, 0, 1])
y_and_one_hot = np.zeros((4, 2))
y_and_one_hot[np.arange(4),y_and]=1
weights = np.sqrt(2/3)*np.random.randn(2, 2)
bias = np.ones((1, 2))
loss = np.infty
while loss > 1e-2:
output = 1/(1 + np.exp(-np.dot(X_and, weights)-bias))
weights -= np.dot(X_and.T ,(output - y_and_one_hot))
bias -= np.mean(output-y_and_one_hot, axis=0, keepdims=True)
loss = -np.mean(np.log(output)*y_and_one_hot)
X_or = np.array([[0, 0],[0, 1],[1, 0],[1, 1]])
y_or = np.array([0, 1, 1, 1])
y_or_one_hot = np.zeros((4, 2))
y_or_one_hot[np.arange(4),y_or]=1
weights = np.sqrt(2/3)*np.random.randn(2, 2)
bias = np.ones((1, 2))
loss = np.infty
while loss > 1e-2:
output = 1/(1 + np.exp(-np.dot(X_or, weights)-bias))
weights -= np.dot(X_or.T ,(output - y_or_one_hot))
bias -= np.mean(output-y_or_one_hot, axis=0, keepdims=True)
loss = -np.mean(np.log(output[np.arange(4), y_or]))
- 可视化代码
需要进行二分类可视化
def ShowData(X,Y, W, B):
for i in range(X.shape[0]):
if Y[i,0] == 0:
plt.plot(X[i,0], X[i,1], '.', c='r')
elif Y[i,0] == 1:
plt.plot(X[i,0], X[i,1], '^', c='g')
# end if
# end for
plt.axis([-0.1, 1.1, -0.1, 1.1])
w12 = -W[0,0]/W[1,0]
b12 = -B[0,0]/W[1,0]
x = np.linspace(0,1,10)
y = x*w12 + b12
plt.plot(x,y)
plt.show()
以上内容参考
4.运行结果
- 与门
- 或门