模模糊糊的选课终于结束了,猛然发现每周多了一天假期哇(不是)
一直在担心的军事理论也应该能重修了,如果疫情一直没有缓解的话,大方向应该是保研没错了(但真心想考一次托福,也想出去看看呢)
眼看快期末了,把上一周的深度学习入门的东西又看了看。第一次写了一个辨别猫脸的神经网络,读取文件的部分完全参考了别人的,学习参数的部分则是自己写的
# -*- coding: utf-8 -*-
"""
Created on Thu May 28 14:51:31 2020
@author: 容错率
"""
import numpy as np
import matplotlib.pyplot as plt
import h5py
from lr_utils import load_dataset
train_set_x_orig , train_set_y , test_set_x_orig , test_set_y , classes = load_dataset()
m_train = train_set_y.shape[1] #训练集里图片的数量。
m_test = test_set_y.shape[1] #测试集里图片的数量。
num_px = train_set_x_orig.shape[1] #训练、测试集里面的图片的宽度和高度(均为64x64)。
#现在看一看我们加载的东西的具体情况
print ("训练集的数量: m_train = " + str(m_train))
print ("测试集的数量 : m_test = " + str(m_test))
print ("每张图片的宽/高 : num_px = " + str(num_px))
print ("每张图片的大小 : (" + str(num_px) + ", " + str(num_px) + ", 3)")
print ("训练集_图片的维数 : " + str(train_set_x_orig.shape))
print ("训练集_标签的维数 : " + str(train_set_y.shape))
print ("测试集_图片的维数: " + str(test_set_x_orig.shape))
print ("测试集_标签的维数: " + str(test_set_y.shape))
#将训练集的维度降低并转置。
train_set_x_flatten = train_set_x_orig.reshape(train_set_x_orig.shape[0],-1).T
#将测试集的维度降低并转置。
test_set_x_flatten = test_set_x_orig.reshape(test_set_x_orig.shape[0], -1).T
print ("训练集降维最后的维度: " + str(train_set_x_flatten.shape))
print ("训练集_标签的维数 : " + str(train_set_y.shape))
print ("测试集降维之后的维度: " + str(test_set_x_flatten.shape))
print ("测试集_标签的维数 : " + str(test_set_y.shape))
train_set_x = train_set_x_flatten / 255
test_set_x = test_set_x_flatten / 255
def sig(x):
return 1/(1 + np.exp(-x))
a=np.zeros(shape = (m_train,1));
def cost(w,b):
re=0
for i in range(m_train):
re=re+(train_set_y[0][i]*np.log(a[i][0]))+(1-train_set_y[0][i])*np.log(1-a[i][0])
# re=re+1
return re/(m_train*(-1.0))
def cal(w,b,j):
te=0;
for i in range(train_set_x.shape[0]):
#for i in range(10):
#te=te+w[0][i]*train_set_x[i][j]
# print(w.shape)
te=te+w[i][0]*train_set_x[i][j]
te=te+b
a[j][0]=sig(te)
return sig(te)
def daow(w,b):
jian = np.zeros(shape = (train_set_x.shape[0],1));
for i in range(train_set_x.shape[1]):
a[i][0]=cal(w,b,i);
for i in range(train_set_x.shape[0]):
#for i in range(10):
dao=0
for j in range(train_set_x.shape[1]):
# print(str(w.shape)+" "+str(train_set_y.shape))
# dao=dao+(cal(w,b,j)-train_set_y[0][j])*w[i][0];
dao=dao+(a[j][0]-train_set_y[0][j])*w[i][0];
#dao=dao+cal(w,b,j)
jian[i][0]=dao/(m_train*1.0)
return jian
def daob(w,b):
t=0;
for j in range(train_set_x.shape[1]):
# print(str(w.shape)+" "+str(train_set_y.shape))
# dao=dao+(cal(w,b,j)-train_set_y[0][j])*w[i][0];
t=t+(a[j][0]-train_set_y[0][j])*1>0;
return t/(m_train*1.0)
def work():
w = np.zeros(shape = (train_set_x.shape[0],1));
b=0;
print(w.shape)
for i in range(0,10000):
ccost=cost(w,b);
tew=w-0.01*daow(w,b)
teb=b-0.01*daob(w,b)
w=tew
b=teb
if i%50==0:
print(str(ccost)+" "+str(i));
work();
学习率为0.01
学习率为0.1
学习率为0.5
学习率为5
学习率为25