作业1答案,待完善
跳到导航
跳到搜索
- 当前答案有误,请自行检查
import numpy as np import os from PIL import Image
def loss(y_pred,y_true):#y_pred shape->vector
return sum((y_pred - y_true)**2)
def df(x):
pass
def random_init(shape):
return np.random.rand(shape)
def load_dataset(path):
ab = os.listdir(path)
ba = [i for i in ab if 'jpg' in i]
x = []
y = []
for i in range(len(ba)):
xi = Image.open(os.path.join(path,ba[i])).convert('L')
xii = np.array(xi)
xii = xii[:200,:200]
yi = sum(sum(xii))
x.append(xii)
y.append(yi)
x = np.array(x)
y = np.array(y)
return x,y
def bp(w,b,c,yi,ai,lr):
for i in range(len(w)):
w[i] = w[i] - lr * 2*(yi-c)*ai[i]
b = b - lr * 2*(yi-c)*1
return w,b
def forword(x,w,b):
return sum(x*w)+b
def train(x,y,w,b,lr):
for i in range(x.shape[0]):
c = forword(x[i],w,b)
los = loss(c,y[i])
w,b = bp(w,b,c,y[i],x[i],lr)
print('Loss:\t',los)
return w,b
def main():
path = r'C:\Users\mtju\Desktop'
lr = 0.01
a , y= load_dataset(path)
x = a.reshape(a.shape[0],-1)
w = random_init(x.shape[1])
b = random_init(1)
for i in range(10):
w1,b1 = train(x,y,w,b,lr)
return w1,b1
- a = random_init(10)
- b = np.random.rand(10,20)
- b = b.reshape(5,5,-1)
- c = loss(a,b)
w , b = main()