2018年12月23日 星期日

route 53 域名 連到 ec2

EC2 建立就不多說,
1. 選擇基本設定,建立虛擬機。把 IP 從 dashboard 複製下來。
2. 記得 key pair 要把 .pem 檔保存下來。一般來說用 puTTYgen 轉成 .ppk 供 putty 使用。如果有設密碼保護,會在你連線 ec2 時問帳密,若用 Ubuntu,帳號名稱會是 ubuntu,密碼會是 所設的密碼保護。若沒在 key 設密碼保護,就會用 .ppk 直接登入。

去到 route 53 想設定的域名裡面,選擇 create record set

把想要的主機名稱填入右側 NAME
把 IP 填入 Value 即可

申請 AWS SSL 憑證

申請憑證方法很簡單,只要十分鐘以內就完成。

首先,要擁有自己的 domain name,我已經在 AWS route 53 上申請好了。

再來,進到 AWS 的 certificate manager : https://aws.amazon.com/tw/certificate-manager/


選取佈建憑證。(我們沒有要建立自己的私有憑證機制)


申請公有憑證。

把自己的網址打進來,我是使用 *. 作 domain 開頭。

因我們有 route 53 可以自己設定 DNS,所以選擇 DNS 驗證。確認檢閱後,則會出現:

將給出來的 CNAME 名稱,與值都複製下來。

進到 route 53,點入你要設定的域名裡,點選 create recorder set:


選擇 type 為 CNAME,將剛剛 CNAME 的名稱填入右方 NAME,值填入右方 VALUE。

點選 create 以後,要等個三五分鐘,等待 DNS 資料在網路傳播開來。再回去 certificate manager 看,就會成為 "已發行" 的狀態。 至此成功。




2018年11月15日 星期四

在 Pytorch Tensor 裡把 RGB 轉為 BGR


非在 影像層次,如果已經在 tensor 層次,要把 RGB 轉為 BGR 也不困難:

# 產生一個亂數 RGB
> t = torch.Tensor(np.arange(12).reshape(4, 3))
# 轉換的排列 RGB --> BGR
> permute = [2, 1, 0] > t[:, permute] tensor([[ 2., 1., 0.], [ 5., 4., 3.], [ 8., 7., 6.], [ 11., 10., 9.]])

就可以轉換成功

2018年11月12日 星期一

GPU 測量好物


Techpowerup

https://www.techpowerup.com/download/techpowerup-gpu-z/

2018年10月31日 星期三

PM專欄 1: 軟體週期與系統週期 ?!

System Development Life Cycle (SDLC) vs Software Development Life Cycle

SDLC vs SDLC?!

這是甚麼東西? 軟體開發生命週期(Software Development Life Cycle) 跟系統開發生命週期(System Development Life Cycle) 是不同的涵蓋面。

軟體開發流程包含了軟體工程所熟悉的: 需求分析、軟體設計、軟體實作、測試、部署、後續維護等等。但是系統開發生命週期就包含更多應該考量的因素,例如: 人的管理、流程管理、硬體相關設施與架構、人員訓練、組織佈達等等層面。

有此一說,當然也有人混用這些定義,不過這個也給我們比較宏觀另一面向的思考。

2018年10月11日 星期四

Pytorch 實作 word embedding : 運用 nn.Embedding()


Pytorch 產生 word embedding : 運用 nn.Embedding()

用法


torch.nn.Embedding(num_embeddingsembedding_dimpadding_idx=Nonemax_norm=Nonenorm_type=2scale_grad_by_freq=Falsesparse=False_weight=None)


num_embeddings (int) : embeddings 字典裡面有多少個詞
embedding_dim (int) : 產生的 embedding vector 要有多少維度?  --> 這個要自己決定

其他細節參數看這裡


範例


import torch
import torch.nn as nn 
from torch.autograd import Variable 

# embedding 字典
word_dict = {'hello': 0, 'paul': 1, 'chao': 2} #三個詞,三個相對 tensors 數值

embeds = nn.Embedding(3, 10) #三個詞(tensors數值),設十維

#從 dictionary 產生 tensor 數值
paul_idx = torch.LongTensor([word_dict['paul']]) 
print(paul_idx) 

#產生變數
paul_idx = Variable(paul_idx) 
print(paul_idx) 

#進行 embedding
paul_embed = embeds(paul_idx) 
print(paul_embed)



結果


tensor([2])
tensor([2])
tensor([[ 1.3302,  0.4645,  0.5615, -0.0327,  1.5131, -1.9684, -0.8720, -0.5227, 1.2371,  0.6098]], grad_fn=)

最後便產生了一個十維的 word embedding 可供運用



2018年8月28日 星期二

Windows 安裝 dlib

Windows 安裝 dlib


Dlib 是甚麼?

BJ4,不然你會甚麼來這裡?  :)

安裝 Dlib : A Hard Way


理論上安裝  dlib  就是

pip install dlib

但是,在 Windows 上你應該會看到這個訊息:


我想,在 windows 上看到這個 cmake XXX 的錯誤,應該是人生裡面幾件最令人厭煩的事情之一,在前一台筆電上,這件事花了小弟不少青春跟電費,你要下載一大包東西、等待、龐雜的錯誤訊息 ....

安裝 Dlib : 有甚麼比站在巨人的肩膀上更爽快?

這個頁面應該會救了你  : https://pypi.org/simple/dlib/



好處不及遍數:

  1. 都好了,下載而已
  2. pypi 官方認證,比較安全,下載一些木馬回來也不見得比較輕鬆
  3. 省下很多時間喝茶打屁看FB
趕快動手作:

  1. 抓回來放在目錄裡 (我是下載 dlib-19.8.1-cp36-cp36m-win_amd64.whl)
  2. pip install dlib-19.8.1-cp36-cp36m-win_amd64.whl
  3. 搞定
  4. 玩耍去 ...

2018年8月11日 星期六

Tensorflow 的卷積層 tf.nn.conv2d() 用法

Tensorflow 的 tf.nn.conv2d() 用法


參數

tf.nn.conv2d( input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None)

Input 輸入資料(如一張圖片)

Input 的型態被設定為一個 4D 的 tensor,這四個維度設定跟 data_format 這個參數有關,
如果 data_format 設成 "NHWC"(預設值), 則四個維度的順序為:

[ Batch size(有多少張圖),  Height(圖高幾個像素), Width(圖寬幾個像素), Channels (有幾個頻道 如 R-G-B 就為 3 個, 單色圖片就為 1) ]

若設成 "NCHW" ,就變成
[ Batch size, Channels, Height, Width ]

# tensor 宣告可以像這樣 
x = tf.placeholder(tf.float32, shape=[1, 5, 5, 1])

輸入的資料可以像這樣

import numpy as np 
import tensorflow as tf 

x_in = np.array([
     [
         [[2], [1], [2], [0], [1]],
         [[1], [3], [2], [2], [3]],
         [[1], [1], [3], [3], [0]],
         [[2], [2], [0], [1], [1]],
         [[0], [0], [3], [1], [2]],
     ]
])

print(x_in.shape) # 形狀就是(1, 5, 5, 1)


Filter 過濾器 (有時稱 kernel )

圖一:Convolution 卷積示意

過濾器的本質就如圖示,I 是輸入的圖片,K即是過濾器。
過濾器之格式為:

[ Height (過濾器高) x Width (過濾器寬) x Input Channels (輸入幾個 channels - 是被 input 所決定的) x Output Channels (輸出幾個 channels - 如圖是 1) ]

特別說明一下,input channel 是被上一層的 channels 數所決定的,而 output channel 則是看下一層接住這個 convolution layer 的 input 會有多少。有興趣更深入的,這裡有進一步講解。

Strides 步進

進行 convolution 計算時,一步要前進多少。由於有四個面向 (即 data_format 所定義的 (NHWC 或 NCHW),所以這個值是一個 1D 的 tensor,但是有四個值,就照 data_format 所定義的順序,一次要跳多少。最常用的就是直接定義為 [1, 1, 1, 1]。

Padding 填充

選擇有兩種,'SAME' or 'VALID',這兩種演算法有人用底下這個圖,我覺得最容易一目了然。以一個例子來說:

  • Input width = 13
  • Filter width = 6
  • Stride = 5 


VALID就是當 filter 不斷滑過去計算,剩下的就丟掉 (drop)。SAME就是過程中不足的,自動補 0 進去。 更簡單來說,如果就整個 input 寬度的邊界來說,會跨過去的(當然要補值)就是 SAME,不會跨過去的就是 VALID。

Data_format 資料格式

前面一直在介紹的,有兩種資料排列方式,NHWC 與 NCHW,預設是 NHWC。
N : 圖形批次 batch size
H : 圖形高度 image height
W: 圖形寬度 image width
C: 頻道數,前面解釋過,RGB圖為三個、單色圖為一個,如果非圖形則看自己要連結的下一層輸入數

Use_cudnn_on_gpu GPU加速

是一個布林值 ( True 或 False ),是否要使用 Nvidia 的類神經網路庫 cudnn 來作 GPU 加速。

範例

import numpy as np 
import tensorflow as tf 

x_in = np.array([
     [ 
         [[1], [2], [3], [4], [5]], 
         [[5], [4], [3], [2], [1]], 
         [[1], [3], [5], [7], [9]], 
         [[2], [4], [6], [8], [10]], 
         [[1], [0], [1], [0], [1]], 
     ] 
]) 

# 設 out_channels==1 
kernel = np.array([ 
     [ 
         [[1]],[[2]] ], [ [[3]],[[4]] 
     ],
])

x = tf.placeholder(tf.float32, shape=[1, 5, 5, 1])
k = tf.constant(kernel, dtype=tf.float32)
conv = tf.nn.conv2d(x, k, strides=[1, 1, 1, 1], padding='VALID')

with tf.Session() as sess:
     result = sess.run(conv, feed_dict={x: x_in})
     print(result.shape, result)


參考

喜歡 "原廠" 英文函數說明的參考這裡

2018年7月29日 星期日

用 Putty 登入 AWS EC2 instance 的私鑰轉換


當用 AWS EC2 產生 Ubuntu (如 16.04 LTS) 的 instance 時,同時選擇使用新的 key 產生,並下載 .pem 的 key 檔。

首先需要了解 PuTTY本身不支持Amazon EC2生成的私鑰格式(.pem),需要使用 PuTTY 所附的工具 PuTTYgen 進行轉換。



進入 PuTTYgen 之後,選擇 Load,將從 AWS 下載的 .pem 檔載進來。



載入後,輸入 passphrase 兩次加強保護,之後選擇  Save private key,產生 PuTTY適用的 key 檔。



進入 PuTTY 除了一般須入的 host name / ip 以外,選擇 SSH --> Auth,將剛剛轉出來的 .ppk key 檔載入即可。

連結後,login account 為 ubuntu,密碼為剛剛所加強保護的 passphrase。

2018年7月24日 星期二

Windows 的 wget

Linux 上我們常用 wget, 那麼在 windows 上呢?

答案是一樣有東西可用! GNU 的  wget 事實上也有 support Windows (試 Windows 10)

站點
http://gnuwin32.sourceforge.net/packages/wget.htm

選 " Complete package, except sources"

或直接下載連結
https://sourceforge.net/projects/gnuwin32/?source=typ_redirect

安裝好,加完系統路徑,



重開 cmd.exe,就可以用了。



安裝優化 Tensorflow GPU相關功能 (Cuda)

問題: 出現 "Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2" 或其他未優化狀況,此為 tensorflow僅使用一般指令集,而未對目前平台新的指令集做優化。

解決方法:

1. 自己動手做

- Windows
https://software.intel.com/zh-cn/articles/tutorial-for-compiling-tensorflow-on-windows

人生苦短,沒有作。

2. 使用別人編譯好的包

- Linux

進去選相關的包
https://github.com/mind/wheels

在自己的虛擬環境
pip --no-cache-dir install https://github.com/mind/wheels/releases/download/{RELEASE}/{WHEEL}

- Windows

進去下載自己需要的包,到虛擬環境的目錄下
https://github.com/fo40225/tensorflow-windows-wheel


在自己的虛擬環境裡安裝
pip --no-cache-dir install 包的名字(如 tensorflow_gpu-1.9.0-cp36-cp36m-win_amd64.whl)


3. 試試看進 python 直譯器

import tensorflow as tf

- 錯誤排除

如出現 "ImportError: Could not find 'cudart64_92.dll'. TensorFlow requires that this DLL be installed in a directory that is named in your %PATH% environment variable. Download and install CUDA 9.2 from this URL: https://developer.nvidia.com/cuda-toolkit"

乖乖去裝一下 https://developer.nvidia.com/cuda-toolkit

- 錯誤排除

ImportError: Could not find 'cudnn64_7.dll'. TensorFlow requires that this DLL be installed in a directory that is named in your %PATH% environment variable. Note that installing cuDNN is a separate step from installing CUDA, and this DLL is often found in a different directory from the CUDA DLLs. You may install the necessary DLL by downloading cuDNN 7 from this URL: https://developer.nvidia.com/cudnn

乖乖去裝一下  https://developer.nvidia.com/cudnn

傳回來是一個壓縮檔
解壓縮到 (我在上面已經重裝了 cuda 9.2, 所以這邊也 copy 進 cuda 9.2 喔)
  1. Copy \cuda\bin\cudnn64_7.dll to C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\bin.
  2. Copy \cuda\ include\cudnn.h to C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\include.
  3. Copy \cuda\lib\x64\cudnn.lib to C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\lib\x64.
參考文章: https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html


然後,就大功告成。


4. 運作看看


# 新建一個 graph. 
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a') 
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b') 
c = tf.matmul(a, b) 

# 新建session with log_device_placement 並設為 True. 
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True)) 

# 運行這個 op.
print(sess.run(c))

剛開始卡了一下,但還是跑完。

注意裡面已經開始使用 GPU了,如: 
MatMul: (MatMul): /job:localhost/replica:0/task:0/device:GPU:0 

終於成功了。

2018年7月12日 星期四

Python 3.6 自行安裝方式

Python 3.6 自行安裝方式(Ubuntu 16.04)

當 apt-get 無法安裝,版本太新、或要安裝特定版本時,可以採用以下安裝方式。

首先到 Python.org 的原始碼下載點 (https://www.python.org/ftp/python)
很多版本可供選擇,選擇一個自己要下載的版本,我這邊選擇了 3.6.6,點入將其檔案連結點複製起來。

右鍵選擇複製連結。

$ wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tar.xz
$ tar xJf Python-3.6.6.tar.xz
$ cd Python.3.6.6
$ ./configure
$ make
$ sudo make install


產生出來的執行檔名稱是 python3.6

Pip 發生無法 SSL 連線

如果遇到,pip 運作的時候,產生 "pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available." 之類的錯誤訊息。

則先安裝
$ sudo apt-get install build-essential checkinstall
$ sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-de

再依照上述步驟重新安裝一次即可。