def metric(y_true, y_pred):
return sum((y_true - y_pred) ** 2) / len(y_true)
def forward(x, p, training=True):
if training:
mask = np.random.binomial(1, p, size=x.shape)
return x * mask / p
else:
return x
import numpy as np v1 = np.array([1, 2, 3]) v2 = np.array([4, 5, 6]) A = np.array([[1, 2], [3, 4]])
import numpy as np np.random.seed(123) n = 100000 dice_rolls = np.random.randint(1, 7, size=n) A = (dice_rolls % 2 == 0) B = (dice_rolls > 3) A_and_B = A & B # 事件 A:擲出偶數 # 事件 B:擲出大於 3
from torchsummary import summary from torchvision import models model = models.vgg16(weights='IMAGENET1K_V1') summary(model, (3, 150, 150)) ---------------------------------------------------------------- Layer (type) Output Shape Param # ---------------------------------------------------------------- Conv2d-1 [-1, 64, 150, 150] 1,792 ReLU-2 [-1, 64, 150, 150] 0 Conv2d-3 [-1, 64, 150, 150] 36,928 ReLU-4 [-1, 64, 150, 150] 0 MaxPool2d-5 [-1, 64, 75, 75] 0 Conv2d-6 [-1, 128, 75, 75] 73,856 ReLU-7 [-1, 128, 75, 75] 0 Conv2d-8 [-1, 128, 75, 75] 147,584 ReLU-9 [-1, 128, 75, 75] 0 MaxPool2d-10 [-1, 128, 37, 37] 0 Conv2d-11 [-1, 256, 37, 37] 295,168 ReLU-12 [-1, 256, 37, 37] 0 Conv2d-13 [-1, 256, 37, 37] 590,080 ReLU-14 [-1, 256, 37, 37] 0 Conv2d-15 [-1, 256, 37, 37] 590,080 ReLU-16 [-1, 256, 37, 37] 0 MaxPool2d-17 [-1, 256, 18, 18] 0 Conv2d-18 [-1, 512, 18, 18] 1,180,160 ReLU-19 [-1, 512, 18, 18] 0 Conv2d-20 [-1, 512, 18, 18] 2,359,808 ReLU-21 [-1, 512, 18, 18] 0 Conv2d-22 [-1, 512, 18, 18] 2,359,808 ReLU-23 [-1, 512, 18, 18] 0 MaxPool2d-24 [-1, 512, 9, 9] 0 Conv2d-25 [-1, 512, 9, 9] 2,359,808 ReLU-26 [-1, 512, 9, 9] 0 Conv2d-27 [-1, 512, 9, 9] 2,359,808 ReLU-28 [-1, 512, 9, 9] 0 Conv2d-29 [-1, 512, 9, 9] 2,359,808 ReLU-30 [-1, 512, 9, 9] 0 MaxPool2d-31 [-1, 512, 4, 4] 0 AdaptiveAvgPool2d-32 [-1, 512, 7, 7] 0 Linear-33 [-1, 4096] 102,764,544 ReLU-34 [-1, 4096] 0 Dropout-35 [-1, 4096] 0 Linear-36 [-1, 4096] 16,781,312 ReLU-37 [-1, 4096] 0 Dropout-38 [-1, 4096] 0 Linear-39 [-1, 1000] 4,097,000 ================================================================ Total params: 138,357,544 Trainable params: 138,357,544 Non-trainable params: 0 ---------------------------------------------------------------- Input size (MB): 0.26 Forward/backward pass size (MB): 96.93 Params size (MB): 527.79 Estimated Total Size (MB): 624.98 ----------------------------------------------------------------
# (A)
import torch
import torchvision.models as models
model = models.vgg16(pretrained=True)
for param in model.parameters():
param.requires_grad = False
model.classifier[6] = torch.nn.Linear(4096, 10)
# (B)
import torch
import torchvision.models as models
model = models.vgg16(pretrained=True)
for param in model.features.parameters():
param.requires_grad = False
model.classifier[6] = torch.nn.Linear(4096, 10)
# (C)
import torch
import torchvision.models as models
model = models.vgg16(pretrained=True)
for param in model.classifier.parameters():
param.requires_grad = False
model.classifier[6] = torch.nn.Linear(4096, 10)
# (D)
import torch
import torchvision.models as models
model = models.vgg16(pretrained=True)
model.requires_grad = False
model.classifier[6] = torch.nn.Linear(4096, 10)
from sklearn.datasets import load_digits digits = load_digits() digits.data.shape # (1797, 64)

import numpy as np noisy = np.random.normal(digits.data, 4)
noisy 中。部分資料經視覺化後的外觀如下:
from sklearn.decomposition import PCA # 程式碼A pca = PCA() # 程式碼B pca.fit(noisy) # 程式碼C components = pca.transform(noisy) # 程式碼D filtered = pca.inverse_transform(components) # 程式碼E
# 程式碼 A from sklearn.model_selection import StratifiedKFold, cross_val_score from sklearn.neighbors import KNeighborsClassifier X, y = digits.data, digits.target model = KNeighborsClassifier(n_neighbors=3) cv = StratifiedKFold(n_splits=5, shuffle=True) scores = cross_val_score(model, X, y, cv=cv, scoring="accuracy") print(scores.mean()) # 程式碼 B from sklearn.model_selection import StratifiedKFold, cross_val_score from sklearn.neighbors import KNeighborsClassifier X, y = digits.data, digits.target model = KNeighborsClassifier(n_neighbors=3) cv = StratifiedKFold(n_splits=5, shuffle=True) scores = cross_val_score(model, X, y, cv=cv, scoring="f1") print(scores.mean()) # 程式碼 C from sklearn.model_selection import StratifiedKFold, cross_val_score from sklearn.neighbors import KNeighborsClassifier X, y = digits.data, digits.target model = KNeighborsClassifier(n_neighbors=3) scores = cross_val_score(model, X, y, cv=5, scoring="accuracy") print(scores.mean()) # 程式碼 D from sklearn.model_selection import StratifiedKFold, cross_val_score from sklearn.neighbors import KNeighborsClassifier X, y = digits.data, digits.target model = KNeighborsClassifier(n_neighbors=3) scores = cross_val_score(model, X, y, cv=5, scoring="f1") print(scores.mean())
import numpy as np
import pandas as pd
from keras import Sequential
from keras.layers import Input, Dense
np.random.seed(123)
df_train = pd.read_csv("titanic_train.csv")
df_test = pd.read_csv("titanic_test.csv")

dataset_train = df_train.values.astype('float32')
dataset_test = df_test.values.astype('float32')
X_train = dataset_train[:, 0:9]
y_train = dataset_train[:, 9]
X_test = dataset_test[:, 0:9]
y_test = dataset_test[:, 9]
X_train -= X_train.mean(axis=0) X_train /= X_train.std(axis=0) X_test -= X_test.mean(axis=0) X_test /= X_test.std(axis=0) # 各敘述: # A:X_train -= X_train.mean(axis=0) 將每個訓練集特徵的平均值調整為 0 # B:X_train /= X_train.std(axis=0) 將每個訓練集特徵的標準差調整為 0 # C:X_train 處理結果會將資料壓縮到 0 和 1 之間 # D:標準化結果防止梯度爆炸或消失 # E:標準化是屬於特徵選擇(Feature Selection)方法 # F:X_train 程式碼應修正為 X_train = X_train.std(axis=0), # X_test 程式碼應修正為 X_test = X_test.std(axis=0)
model = Sequential() model.add(Input(shape=(X_train.shape[1],))) model.add(Dense(10, activation="relu")) model.add(Dense(10, activation="relu")) model.add(Dense(1, activation="sigmoid")) model.summary() model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])
model.summary() 後輸出如下(Model: "sequential"):
history = model.fit(X_train, y_train, validation_split=0.2, epochs=100, batch_size=10)
loss, accuracy = model.evaluate(X_train, y_train, verbose=0)
import matplotlib.pyplot as plt
loss = history.history["loss"]
epochs = range(1, len(loss)+1)
val_loss = history.history["val_loss"]
plt.plot(epochs, loss, 空格1, label="Training Loss")
plt.plot(epochs, val_loss, 空格2, label="Validation Loss")
plt.title("Training and Validation Loss")
plt.xlabel("Epochs")
plt.ylabel("Loss")
plt.legend()
plt.show()
# 各敘述:
# A:空格1須填入 "b-"
# B:空格2須填入 "b--"
# C:空格1須填入 "r-"
# D:空格2須填入 "r--"
# E:驗證損失明顯較訓練損失減少更明顯
