臺大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]))
相關文章
- 乾貨 | 臺大“一天搞懂深度學習”課程PPT(下載方式見文末!!)深度學習
- 為什麼要學習作業系統課程?作業系統
- Andrew ng 深度學習課程筆記深度學習筆記
- 【課程學習】課程2:十行程式碼高效完成深度學習POC行程深度學習
- 寒假關於計算機課程的學習計劃(第二次作業<二>)計算機
- 10 大線上免費深度學習課程深度學習
- 矽谷 機器學習 深度學習 人工智慧課程機器學習深度學習人工智慧
- 機器學習、深度學習、強化學習課程超級大列表!機器學習深度學習強化學習
- UFLDL:史丹佛大學深度學習課程總結深度學習
- 【深度學習】深度學習md筆記總結第1篇:深度學習課程,要求【附程式碼文件】深度學習筆記
- Andrew NG 深度學習課程筆記:神經網路、有監督學習與深度學習深度學習筆記神經網路
- 國內有哪些大學開了深度學習課程?深度學習
- 吳恩達《神經網路與深度學習》課程筆記(1)– 深度學習概述吳恩達神經網路深度學習筆記
- 吳恩達深度學習課後作業英文版百度雲吳恩達深度學習
- 作業系統學習(二)—— 程式作業系統
- 深度學習課程--assign3--RNN簡單理解深度學習RNN
- Andrew NG 深度學習課程筆記:二元分類與 Logistic 迴歸深度學習筆記
- 雲端計算學習路線課程大綱資料:作業控制 jobs
- 深度學習DeepLearning.ai系列課程學習總結:9.深度學習基礎實踐理論深度學習AI
- 軟體工程課程小作業軟體工程
- 深度學習課程--assign3--LSTM結構的理解深度學習
- Kaggle推出免費線上課程,覆蓋機器學習、深度學習等四門課機器學習深度學習
- deep learning深度學習之學習筆記基於吳恩達coursera課程深度學習筆記吳恩達
- Linux運維課程學習週期是多久?學習難度大嗎?Linux運維
- Talent Plan 學習營初體驗:交流+堅持 開源協作課程學習的不二路徑
- Linux運維課程可以零基礎學習嗎?Linux運維
- Andrew NG 深度學習課程筆記:梯度下降與向量化操作深度學習筆記梯度
- 這份深度學習課程筆記獲吳恩達點贊深度學習筆記吳恩達
- 輕微課好不好?靠譜嗎?來看看輕微課學員學習一階段作業全過程。
- 資料庫課程作業筆記資料庫筆記
- 作業系統課程設計感受作業系統
- 第一次作業:深度學習基礎深度學習
- golang學習第二課Golang
- 深度學習DeepLearning.ai系列課程學習總結:14. Tensorflow入門深度學習AI
- 《深度學習Ng》課程學習筆記01week3——淺層神經網路深度學習筆記神經網路
- 大牛與搬運工的差距——學習方法的力量
- 演算法學習之路|搬運傢俱(模擬)演算法
- 如何高效學習java課程Java