人工智能实战2019BUAA_第五次作业_刘星航(补)逻辑与门和逻辑或门


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.运行结果

  • 与门

  • 或门

posted @ 2019-06-05 15:52  ReinHt  阅读(212)  评论(0编辑  收藏  举报