题目要求
1.按要求完成下面的各项需求。
利用神经网络模型,实现异或非逻辑:
X =[[1,0,0],[1,0,1],[1,1,0],[1,1,1]]
y = [[1],[0],[0],[1]]
具体要求:
完成数据初始化
实现激活函数及其导数
实现代价函数
实现梯度下降并记录代价函数
完成模型的训练,并计算在训练集上的准确率
画出代价函数曲线
代码如下:
import numpy as np
from matplotlib import pyplot as plt
# 设置中文字体和负号正确显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 数据处理部分
X =[[1,0,0],[1,0,1],[1,1,0],[1,1,1]]
y = [[1],[0],[0],[1]]
X = np.array(X)
y = np.array(y)
# 定义激活函数
def g(z,deriv=False):
if deriv:
return z * (1 - z)
return 1/(1 + np.exp(-z))
# 定义模型 设计一个三层的神经网络,隐藏层有8个神经元,二分类问题
def model(X,theta1,theta2):
a1 = X
z2 = np.dot(a1,theta1)
a2 = g(z2)
z3 = np.dot(a2,theta2)
a3 = g(z3)
return a1,a2,a3
# 定义代价函数