臺大2020年深度學習課程作業二(搬運)
臺大2020年深度學習課程作業二(搬運)
厚顏無恥的搬運一下,方便不能翻牆的小夥伴查閱。
import numpy as np
import matplotlib.pyplot as plt
X_test_path='./data/X_test'
X_train_path='./data/X_train'
Y_train_path='./data/Y_train'
with open(X_test_path) as f:
next(f)
X_test=np.array([line.strip('\n').split(',')[1:] for line in f],dtype=float)
with open(X_train_path) as f:
next(f)
X_train=np.array([line.strip('\n').split(',')[1:] for line in f],dtype=float)
with open(Y_train_path) as f:
next(f)
Y_train=np.array([line.strip('\n').split(',')[1:] for line in f],dtype=float)
#訓練資料和測試資料的歸一化操作
def _normalization(X,train=True,cloumn_index=None,X_mean=None,X_std=None):
if cloumn_index==None:
cloumn_index=np.arange(len(X[0]))
if train:
X_mean=np.mean(X[:,cloumn_index],axis=0)
X_std=np.std(X[:,cloumn_index],axis=0)
X[:,cloumn_index]=(X[:,cloumn_index]-X_mean)/(X_std+1e-8)
return X,X_mean,X_std
X_train,X_mean,X_std=_normalization(X_train)
X_test,_,_=_normalization(X_test,False,None,X_mean,X_std)
#劃分訓練集和驗證集
def _splitdata(X,Y,split_ratio=0.2):
splitIndex=int(X.shape[0]*(1-split_ratio))
return X[:splitIndex],Y[:splitIndex],X[splitIndex:],Y[splitIndex:]
dev_ratio=0.1
X_train,Y_train,X_dev,Y_dev=_splitdata(X_train,Y_train,0.1)
train_size = X_train.shape[0]
dev_size = X_dev.shape[0]
test_size = X_test.shape[0]
data_dim = X_train.shape[1]
print('Size of training set: {}'.format(train_size))
print('Size of development set: {}'.format(dev_size))
print('Size of testing set: {}'.format(test_size))
print('Dimension of data: {}'.format(data_dim))
#隨機函式
def _shuffle(X,Y):
randomIndex=np.random.shuffle(np.arange(X.shape[0]))
return X[randomIndex],Y[randomIndex]
#啟用函式
def _sigmoid(Z):
return np.clip(1/(1-np.exp(-Z)),1e-8,1-1e-18)
#神經元前向函式
def _f(X,w,b):
return _sigmoid(np.matmul(X,w)+b)
#預測函式
def _prediction(X,w,b):
return np.round(_f(X,w,b)).astype(np.int)
#精度判斷函式
def _accuracy(Y_pred,Y_label):
return 1-np.mean(np.abs(Y_pred-Y_label))
#交叉熵函式
def _cross_entropy_loss(Y_pred,Y_label):
loss=-(np.dot(Y_label,np.log(Y_pred))+np.dot(1-Y_label,np.log(1-Y_pred)))
return loss
#梯度函式
def _gradient(X,Y_label,w,b):
Y_pred=_prediction(X,w,b)
loss=(Y_label-Y_pred)
w_grad=-np.sum(loss*X.T,1)
b_grad=-np.sum(loss)
return w_grad,b_grad
#引數初始化
w=np.zeros((data_dim,))
b=np.ones((1,))
max_iter=10
bachsize=8
learning_rate=0.2
step=1#用於標記學習率的衰減
#訓練時儲存的引數
train_loss=[]
dev_loss=[]
train_acu=[]
dev_acu=[]
#開始進行模型訓練
for epoch in range(max_iter):
X_train,Y_train=_shuffle(X_train,Y_train)
for idx in range(int(np.floor(train_size/bachsize))):
X_batch=X_train[idx*bachsize:(idx+1)*bachsize]
Y_batch=Y_train[idx*bachsize:(idx+1)*bachsize]
w_grad,b_grad=_gradient(X_batch,Y_batch,w,b)
w=w-learning_rate/sqrt(step)*w_grad
b=b-learning_rate/sqrt(step)*b_grad
step+=1
train_predict=np.floor(_f(X_train,w,b))
train_acu.append(_accuracy(train_predict,Y_train))
train_loss.append(_cross_entropy_loss(train_predict,Y_train)/train_size)
dev_prediction=np.floor(_f(X_dev,w,b))
dev_acu.append(_accuracy(dev_prediction,Y_dev))
train_loss.append(_cross_entropy_loss(dev_prediction,Y_dev)/dev_size)
print('Training loss: {}'.format(train_loss[-1]))
print('Development loss: {}'.format(dev_loss[-1]))
print('Training accuracy: {}'.format(train_acc[-1]))
print('Development accuracy: {}'.format(dev_acc[-1]))
相關文章
- UFLDL:史丹佛大學深度學習課程總結深度學習
- 國內有哪些大學開了深度學習課程?深度學習
- 機器學習、深度學習、強化學習課程超級大列表!機器學習深度學習強化學習
- 【課程學習】課程2:十行程式碼高效完成深度學習POC行程深度學習
- Linux運維課程學習週期是多久?學習難度大嗎?Linux運維
- 雲端計算學習路線課程大綱資料:作業控制 jobs
- 【深度學習】深度學習md筆記總結第1篇:深度學習課程,要求【附程式碼文件】深度學習筆記
- 深度學習課程--assign3--RNN簡單理解深度學習RNN
- Andrew NG 深度學習課程筆記:二元分類與 Logistic 迴歸深度學習筆記
- 神經網路與深度學習 課程複習總結神經網路深度學習
- 吳恩達《神經網路與深度學習》課程筆記(1)– 深度學習概述吳恩達神經網路深度學習筆記
- 吳恩達深度學習課後作業英文版百度雲吳恩達深度學習
- 深度學習課程--assign3--LSTM結構的理解深度學習
- Linux是什麼作業系統?Linux運維課程難嗎?Linux作業系統運維
- Linux運維課程可以零基礎學習嗎?Linux運維
- TP開發的視訊課程學習平臺
- 軟體工程課程小作業軟體工程
- Talent Plan 學習營初體驗:交流+堅持 開源協作課程學習的不二路徑
- 資料採集與融合技術實驗課程作業二
- Andrew NG 深度學習課程筆記:梯度下降與向量化操作深度學習筆記梯度
- 這份深度學習課程筆記獲吳恩達點贊深度學習筆記吳恩達
- 吳恩達授課,史丹佛CS230深度學習課程資源開放吳恩達深度學習
- 資料庫課程作業筆記資料庫筆記
- 輕微課好不好?靠譜嗎?來看看輕微課學員學習一階段作業全過程。
- lua課程學習筆記筆記
- 如何高效學習java課程Java
- golang學習第二課Golang
- 清華大學ucore作業系統課筆記作業系統筆記
- 高階語言程式設計課程第二次作業程式設計
- 2024秋軟體工程課程個人作業(第二次)軟體工程
- 深度學習發展歷程深度學習
- 百頁課程筆記,統計物理視角下的深度學習筆記深度學習
- 大牛與搬運工的差距——學習方法的力量
- 想要學習web前端需要學習那些課程Web前端
- 第一次作業:深度學習基礎深度學習
- 計算機課程第三週作業計算機
- 作業系統課程實踐報告作業系統
- jQuery第二章課後作業jQuery