2Captcha是一個非常強大的CAPTCHA辨識服務。在我們日常生活當中,如果要登入網站(如:AWS的帳戶登入頁面),可能就會遇到需要手動輸入驗證碼的視窗,有些可能單純只是英文及數字的組合。但是有些卻極度複雜,扭曲的字體及顏色,常常讓使用者感到困擾。

各種不同類型的 Captcha

2Captcha API可以解決各種千奇百怪的Captcha,如下圖所示。最簡單的文字及英文不用說,甚至是回答今天星期幾、轉動圖片成指定方向、拖動圖片、進行圖片拼圖分類都能達成,相當好用。


參考資料

如果我們想要UnNormalize,可以怎麼做?

class UnNormalize(object):
def __init__(self, mean, std):
self.mean = mean
self.std = std
def __call__(self, tensor):
for t, m, s in zip(tensor, self.mean, self.std):
t.mul_(s).add_(m)
return tensor
#假設transforms.Normalize的mean和std長這樣:
normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225])
mean=[0.485, 0.456, 0.406]
std=[0.229, 0.224, 0.225]
unorm = UnNormalize(mean=mean, std=std)#所得到的image就是被還原後的tensor
image = unorm(normalized_image)

參考資料

完整程式:計算並保存混淆矩陣圖、列印出每個class的Accuracy

取得預測結果並計算混淆矩陣

y_pred = []
y_true = []
model.eval()

with torch.no_grad():
for i, (images, target) in enumerate(test_loader):
output = model(images)
_, preds = torch.max(output, 1) #preds是預測結果
loss = criterion(output, target)
y_pred.extend(preds.view(-1).d …

我們通常都只在乎model最終的output,而比較少去關注中間Layer的output。假如想要取得中間Layer的output可以怎麼做?

例如:t-SNE的視覺化就會使用到分類器前一層的output

1. register_forward_hook(CSDN)

取得LeNet中conv2的output(使用list保存數值)
我在dataloader使用這個方法能正常運作,使用2.的出現None type Error

import torch
import torch.nn as nn
import torch.nn.functional as F

class LeNet(nn.Module):
def __init__(self):
super(LeNet …

這個軟體在使用上與sklearn版本的tsne沒有太大差異,但是運算速度快上不少。尤其在面對大量資料(100多萬張圖片)下,tsne-cuda因為使用GPU運算的關係,比起sklearn只使用CPU的方式下,速度提升很多。官方宣稱速度是sklearn的1200倍提升。

t-SNE-CUDA專案的詳細介紹

安裝(aiForge) CUDA 10.0版本

# https://github.com/CannyLab/tsne-cuda/wiki/Installation
conda install tsnecuda cuda100 -c cannylab

使用方式

import numpy as np
from tsnecuda import TSNE
X = np.array([[0, 0, 0], [0, 1, 1], [1, 0, 1], [1, 1, 1]])
X_embedded = TSNE().fit_transform(X)
X_embedded.shape

與sklearn版本對照

import numpy as np
from sklearn.manifold import TSNE

X = np.array([[0, 0, 0], [0, 1, 1], [1, 0, 1], [1, 1, 1]])
X_embedded = TSNE(n_components=2).fit_transform(X)
X_embedded.shape

主要差異在第二行的import不同,一個是從tsnecuda;一個是從sklearn.manifold

PyTorch實作


DQN: we feed the state as an input to the network, and it returns the Q values of all possible actions in that state, then we select an action that has a maximum Q value.

Policy gradient: we feed the state as input to the network, and it
returns the probability distribution over an action space, and our stochastic policy uses the probability distribution returned by the neural network to select an action.

Yanwei Liu

Machine Learning | Deep Learning | https://linktr.ee/yanwei

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store