Mac 的 AMD 顯卡於 Keras 加速解法 – PlaidML

Apple 近幾年所推出的 MacBook Pro / iMac / Mac mini…. 都是 AMD 的顯卡,沒有 Nivida
且 Nvidia 最近也沒什麼官方支援 Mac 的 Driver 了 ( 所以透過 eGPU 來在 Mac 上使用 NV 卡好像不是太好的選擇 )

然而 Tensorflow 之類的 Tool 都是使用 CUDA 來加速的
( Google 官方也移除了 Mac 上的 tensorflow-gpu )
讓 MacBook Pro 的 AMD User 好像覺得只能使用 CPU….
空有強大的顯卡卻無用武之地
( 本人的 MacBook Pro 是使用 Radeon Pro 系列… 另外在 Mac 上 AMD 應該沒啥驅動的問題 )

但是如果是使用 Keras 且配 AMD 卡的人就不用擔心了
因為今天要說的就是如何使用 Keras + AMD GPU ( Mac 上還有 Metal ) 的解決方法 就是使用 PlaidML
https://github.com/plaidml/plaidml 使用上很簡單
直接 pip 安裝,ex :
pip3 install plaidml-keras plaidbench

然後輸入指令
plaidml-setup
會看到類似以下資訊
Default Config Devices:
   No devices.

Experimental Config Devices:
   llvm_cpu.0 : CPU (LLVM)
   opencl_intel_intel(r)_hd_graphics_530.0 : Intel Inc. Intel(R) HD Graphics 530 (OpenCL)
   opencl_cpu.0 : Intel CPU (OpenCL)
   metal_amd_radeon_pro_460.0 : AMD Radeon Pro 460 (Metal)
   opencl_amd_amd_radeon_pro_460_compute_engine.0 : AMD AMD Radeon Pro 460 Compute Engine (OpenCL)
   metal_intel(r)_hd_graphics_530.0 : Intel(R) HD Graphics 530 (Metal)

Using experimental devices can cause poor performance, crashes, and other nastiness.
Continue reading “Mac 的 AMD 顯卡於 Keras 加速解法 – PlaidML”

德文與英文的數字聽力測驗

最近覺得,需要對於英文數字與德語數字的聽力加強
所以寫了這個簡單的小 Python Script 會產生隨機的數字與位數 ( 可以自己動手修改 )
用來訓練自己對於語言的聽力與語感
但是這部份只有在 Mac 上有用
( 因為是用內建的發音,且只是簡單做的 ) Source Code 可以於 GitHub 下載 :
https://github.com/Seachaos/SeaToolbox/blob/master/NumberGuess/number_guess.py
簡單說一下參數

Continue reading “德文與英文的數字聽力測驗”

Gulp 的 sass-image 使用簡單範例

前言

gulp 用來幫助/簡化我們完成很多前端程式所需的工作
今天簡單來說一下 gulp-sass-image 這個用途

整個範例可以在 Github 上看到
https://github.com/Seachaos/gulp-sass-image-example

安裝

其實有用 yarn 的話,直接下 yarn add gulp-sass-image 就搞定

使用

先說明一下,此範例專案的配置是

app/     原始 SCSS 與 圖檔資料
build/  最後要上線的資料夾 ( 編譯完成,下稱”目地資料夾” )

在 gulpfile.js 中加入

gulp.task('sass-image', () => {
  return gulp.src('app/images/*.+(jpg|png)') // 接受 jpg, png
    .pipe(sassImage({
        targetFile: 'image_data.scss',       // 處理完的 SCSS 檔名
        css_path: './app/css',               // CSS 檔案位置
        images_path: './app/images',         // image 檔案位置
        includeData: false,                  // 是否將 image 加入到 SCSS 中
    }))
    .pipe(gulp.dest('app/cache'));           // 處理後的 SCSS 檔放位置
});

includeData 特別說明:
其中如果  includeData 設成 true, 那麼圖檔就會被加入 SCSS 中
原本 image-url 改用  inline-image 的話,就不用再另外放置 image 資料夾到”目地資料夾了”
( 會變成將圖檔夾帶到 css 檔中 )

Continue reading “Gulp 的 sass-image 使用簡單範例”

Mac install gstreamer plugins by Homebrew

Gstreamer 有許多的 plugins , 但如果直接在 home brew 中安裝,會遇到很多 pipeline 缺少的問題

以下這幾個指令可以簡單的安裝 gstreamer 的 good, base, bad, ugly plugin
( 透過 brew install 簡單安裝 )

Good :

brew install gst-plugins-good `brew options gst-plugins-good | grep 'with-'`

Continue reading “Mac install gstreamer plugins by Homebrew”

Sklearn 的 OneHotEncoder 說明與簡單範例

Sklearn 是 Python 機器學習 ( Machine Learning ) 或資料分析中一個好用的工具,其中 OneHotEncoder 是可以將特徵扁平化的工具,配合  LabelEncoder 使用效果更好,這邊做一個簡單的用法說明教學

例如有以下資料 :

data = [ ['cat', 1], ['cat', 2], ['dog', 3], ['cat', 2], ['fish', 0] ]

第一步就是先用 LabelEncoder 將 cat,dog,fish 變成 0,1,2 來方便後續資料處理

( 別忘記先轉成 numpy array 比較好處理,   ndata = np.array(data) )

# 將 cat, dog, fish 分類, 成 0, 1, 2
ndata[:, 0] = LabelEncoder().fit_transform(ndata[:, 0])
"""
        type
array([['0', '1'],
       ['0', '2'],
       ['1', '3'],
       ['0', '2'],
       ['2', '3']],
      dtype='<U4')
"""

 

接下來用 enc = OneHotEncoder().fit(ndata) 來取得一個 OneHotEncoder 編碼器 ( enc )

 

Continue reading “Sklearn 的 OneHotEncoder 說明與簡單範例”

Python Matplotlib 簡單繪制圖表教學 ( 折線圖 )

Python 的 Matplotlib 的可用來繪製簡單的折線圖,例如 N 路線圖 或是 數據圖

只要使用 plt.plot ,給 X, Y 值就可以畫出圖表例,例如

這邊說明一下, plt.plot 有不同的參數可以做出不同的線或是點

plt.plot(x, y, 'o') # 只有點
plt.plot(x, y) # 只有線( 預設 )
plt.plot(x, y, '-o') # 點和線
plt.plot(x, y, '--o') # 點和虛線

Continue reading “Python Matplotlib 簡單繪制圖表教學 ( 折線圖 )”

VueJS 簡單教學: v-for 與選單產生

VueJS 中的 v-for 的 List Rendering 是一個強大的功能,可以方便將 JSON 資料轉換成 html 內容。

例如以下資料是由 API 或其他 JS 產生的,要用來製作選單 ( 用 Javascript 來動態產生選單 )

items: [
  {name: "選單1", href: "https://tree.rocks/"},
  {name: "選單2", href: "https://www.apple.com/"},
  {name: "選單3", href: "https://github.com/"}
]

 

那麼可以放入 Vue JS 中

new Vue( {
  el: '#tree',
  data: {
  	items: [
    	{name: "選單1", href: "https://tree.rocks/"},
      {name: "選單2", href: "https://www.apple.com/"},
      {name: "選單3", href: "https://github.com/"}
    ]
  }
} );

在加點 html

<div id="tree">
  <div class="menu_item" v-for="item in items" >
    <a v-bind:href="item.href" >{{ item.name }}</a>
  </div>
</div>

 

就可以生成網頁了 ( 如下圖 )

 

範例網頁:
https://jsfiddle.net/Seachaos/w8ygx1dy/