#本文中的代码可能会与书中范例代码有些许出入,同时在其它平台上在能正确执行的可能性不高,仅供参考用
最近在网上看了几个和人工智能有关的视频,发现人工智能学习门槛比我想象的要低。于是有点膨胀,在网上买了一本入门书籍。
(书封面的咸鱼成功吸引了我的注意)
目前把前4章读完了,下面是根据书中的内容做出来的可以识别28*28像素mnist数据集的程序(事实上,本程序采用的算法效率较低,于是只用了很少的迭代代数,远远达不到准确识别的效果)
下面是代码
from common.functions import *
from common.gradient import numerical_gradient
import numpy as np
from dataset.mnist import load_mnist
import matplotlib.pyplot as plt
class Two_layer_Net:
def __init__(self,input_size,output_size,hidden_size,weight_init_std = 0.01):
self.peremters = {}
#初始化参数
self.peremters['W1'] = weight_init_std * np.random.randn(input_size,hidden_size)
self.peremters['W2'] = weight_init_std * np.random.randn(hidden_size,output_size)
self.peremters['b1'] = np.zeros(hidden_size)
self.peremters['b2'] = np.zeros(output_size)
def predict(self,x):
w1,w2 = self.peremters['W1'],self.peremters['W2']
b1,b2 = self.peremters['b1'],self.peremters['b2']
#第一层用sigmoid激活函数
mid1 = np.dot(x,w1) + b1
level1 = sigmoid(mid1)
#第二层用softmax激活函数
mid2 = np.dot(level1,w2) + b2
level2 = softmax(mid2)
return level2
def loss(self,x,t):
result = self.predict(x)
return cross_entropy_error(result,t)
def numerical_gradient(self,x,t):
loss_W = lambda w: self.loss(x,t)
#对各个参数求导
grads = {}
grads['W1'] = numerical_gradient(loss_W,self.peremters['W1'])
grads['