上午: Python程式设计
今日教学keras使用内建mnist dataset练习
from tensorflow.keras.datasets import mnist(train_x, train_y), (test_x, test_y) = mnist.load_data()
# 检视内容import matplotlib.pyplot as pltplt.gcf().set_size_inches(15,4)for i in range(5): axe = plt.subplot(1, 5, 1+i) axe.imshow(train_x[i], cmap = 'gray') axe.set_title(f'label = {train_y[i]}', fontsize = 18)plt.show()
from tensorflow.keras.utils import to_categoricalX_train = train_x.reshape(60000, 28*28)X_test = test_x.reshape(10000, 28*28)X_train = X_train.astype('float')/255 #资料型态从 unit8 转成浮点数,并做正规化X_test = X_test.astype('float')/255Y_train = to_categorical(train_y) # one-hot encodingY_test = to_categorical(test_y)
from tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import Densemodel = Sequential()model.add(Dense(512, activation = 'relu', input_dim = 28*28))model.add(Dense(10, activation = 'softmax'))model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracymodel.fit(X_train, Y_train, epochs=10, batch_size=128)
test_loss, test_accuracy = model.evaluate(X_test, Y_test)print(f'Loss = {test_loss}, Accuracy = {test_accuracy}')
#储存模型model.save('mnist_model.h5')# Load modelfrom tensorflow.keras.models import load_modelmodel = load_model('mnist_model.h5')model.summary()
下午:Pytorch 与深度学习初探
使用Google Colab撰写程式,依照步骤执行
!pip install torch# step1: load data (generate)import torchimport torch.nn as nnimport matplotlib.pyplot as pltimport numpy as npdef plot_fit(option=0): plt.scatter(X,Y) mx=np.array([-20,20]) if option==0: [w,b]=[-7,5] else: [w,b]=model.parameters() w=w[0][0].detach().item() b=b[0].detach().item() my=w*mx+b plt.plot(mx,my,'r') plt.show()X=torch.randn(200,1)*10Y=3*X+torch.randn(200,1)*5plot_fit()# step2: preprocessing X,Yprint("X,Y ready")# step3: build modelmodel=nn.Linear(1,1)torch.nn.init.xavier_uniform_(model.weight)[w,b]=model.parameters()print(w,b)criterion= nn.MSELoss()optimizer= torch.optim.SGD(model.parameters(),lr=0.0001)# step4: traing modeltorch.manual_seed(1)epochs=10000losses=[]for e in range(epochs): preY=model.forward(X) loss=criterion(preY,Y) losses.append(loss) optimizer.zero_grad() loss.backward() optimizer.step()plt.plot(range(epochs),losses)plt.show()plot_fit(1)plt.show()# step5: evaluate model (draw)