網頁

2018年6月5日 星期二

Activation Function

Sigmoid
輸出介於0-1, 特別適用於概率輸出的模型
本身為單調函數(monotonic function)(漸增或漸減), 但導數不是
邏輯上,在訓練期間可能會卡住
一般會使用 softmax function 替代, 使得每一個元素都在0-1, 並且所有元素合為1
適用於多樣分類
圖片來源
Tanh
類似 sigmoid, 輸出介於 -1 到 1
本身為單調函數(monotonic function)(漸增或漸減), 但導數不是
適用於二分類
圖片來源
ReLU
為卷積神經網路或深度學習最常用的函數
輸出範圍從 0 到無限大
計算輛小,只需判斷輸入是否大於 0
圖片來源

激勵函數一般建議使用ReLU, 或者變形的 Leaky ReLU, Tanh 和 Sigmoid 盡量別用,
因為他們有梯度消失的問題,是類神經網路加深時主要的訓練障礙。
圖片來源

2018年5月3日 星期四

jupyter notebook

jupyter notebook 出錯

(tensorflow) D:\TensorFlow>jupyter notebook
Traceback (most recent call last):
  File "d:\anaconda3\envs\tensorflow\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "d:\anaconda3\envs\tensorflow\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "D:\Anaconda3\envs\tensorflow\Scripts\jupyter-notebook.EXE\__main__.py", line 5, in <module>
  File "d:\anaconda3\envs\tensorflow\lib\site-packages\notebook\notebookapp.py", line 44, in <module>
    from zmq.eventloop import ioloop
  File "d:\anaconda3\envs\tensorflow\lib\site-packages\zmq\__init__.py", line 47, in <module>
    from zmq import backend
  File "d:\anaconda3\envs\tensorflow\lib\site-packages\zmq\backend\__init__.py", line 40, in <module>
    reraise(*exc_info)
  File "d:\anaconda3\envs\tensorflow\lib\site-packages\zmq\utils\sixcerpt.py", line 34, in reraise
    raise value
  File "d:\anaconda3\envs\tensorflow\lib\site-packages\zmq\backend\__init__.py", line 27, in <module>
    _ns = select_backend(first)
  File "d:\anaconda3\envs\tensorflow\lib\site-packages\zmq\backend\select.py", line 26, in select_backend
    mod = __import__(name, fromlist=public_api)
  File "d:\anaconda3\envs\tensorflow\lib\site-packages\zmq\backend\cython\__init__.py", line 6, in <module>
    from . import (constants, error, message, context,
ImportError: cannot import name 'constants'

重新安裝 pyzmq 可以解決
pip uninstall pyzmq
pip install pyzmq




2018年5月2日 星期三

python labelImg.py 增加另一資料(pose)輸入

執行遇到問題
conda install pyqt=5
pip install --upgrade lxml
pyrcc5 -o resources.py resources.qrc

出現錯誤
Traceback (most recent call last):
  File "labelImg.py", line 1452, in <module>
    sys.exit(main())
  File "labelImg.py", line 1448, in main
    app, _win = get_main_app(sys.argv)
  File "labelImg.py", line 1441, in get_main_app
    argv[3] if len(argv) >= 4 else None)
  File "labelImg.py", line 109, in __init__
    self.settings.load()
  File "D:\TensorFlow\ObjectDetection\labelImg\libs\settings.py", line 33, in load
    self.data = pickle.load(f, encoding="iso-8859-1")
ModuleNotFoundError: No module named 'PyQt4'
請刪除 c:\users\user name\.labelImgSettings.pkl

pascal_voc_io.py
  def addBndBox(self, xmin, ymin, xmax, ymax, name, pose, difficult):
    bndbox['pose'] = pose
self.boxlist.append(bndbox)
  def appendObjects(self, top):
    for each_object in self.boxlist:
      pose.text = unicode(each_object['pose'])
  def save(self, targetFile=None):
    self.appendObjects(root)

labelFile.py
  def savePascalVocFormat(self, filename, shapes, imagePath, imageData, lineColor=None, fillColor=None, databaseSrc=None):
    for shape in shapes:
  pose = shape['pose']
  writer.addBndBox(bndbox[0], bndbox[1], bndbox[2], bndbox[3], label, pose, difficult)

canvas.py

labelImage.py
class MainWindow(QMainWindow, WindowMixin):
  def __init__(self, defaultFilename=None, defaultPrefdefClassFile=None, defaultSaveDir=None):
    self.labelList = QListWidget()
self.canvas = Canvas(parent=self)
  def saveLabels(self, annotationFilePath):
    shapes = [format_shape(shape) for shape in self.canvas.shapes]
self.labelFile.savePascalVocFormat(annotationFilePath, shapes, self.filePath, self.imageData, self.lineColor.getRgb(), self.fillColor.getRgb())
  def addLabel(self, shape):
    item = HashableQListWidgetItem(shape.label)
item.setPose(shape.pose)
self.labelList.addItem(item)
  def currentItem(self):
    items = self.labelList.selectedItems()
return items[0]
  def editLabel(self):
    item = self.currentItem()
text, pose = self.labelDialog.popUp(item.text(), item.getPose())
item.setPose(pose)
item.setLabel(label)
item.setText(label + "_" + pose)
  def labelItemChanged(self, item):
    shape = self.itemsToShapes[item]
shape.label = item.text()
class HashableQListWidgetItem(QListWidgetItem):

labelDialog.py
  def popUp(self, text='', pose='', move=True):

2018年4月28日 星期六

Kennel 升級紀錄

Windows 10 回復原廠設定不能使用
出現 "重設您的電腦時發生問題 沒有做任何變更"
官方網站下載 Windows 10
此時會有兩種選項,一是升級本身的電腦,二是建立安裝媒體(USB 隨身碟 8G)
兩者皆有測試過
似乎授權已經寫入 BIOS, 所以即使換硬碟重灌也可以直接啟用

部分的硬碟分割區無法刪除
需用 命令題是字元 執行 diskpart
DISKPART> list disk
DISKPART> select disk 1
DISKPART> list disk
DISKPART> list partition
DISKPART> clean

資料庫使用
mariadb-10.2.14-winx64.msi
備份使用
dump.bat
@echo off
set dt=%date:~0,10%
rem date format is "YYYY-MM-DD"
set dy=%dt:~0,4%
set dm=%dt:~5,2%
set dd=%dt:~8,2%
rem echo %dt%
set TODAY=%dy%%dm%%dd%
dump.bat
call today.bat
"c:\Program Files\MariaDB 10.2\bin\mysqldump.exe" -u root -pmark1234 -B kennel util>mariadb_%today%.sql
"c:\Program Files\7-Zip\7z.exe" a -tzip mariadb_%today%.sql.zip mariadb_%today%.sql
del mariadb_%today%.sql


開發環境使用
jdk-8u172-windows-i586.exe (給舊的 Eclipse 3 使用 32位元環境)
jdk-8u172-windows-x64.exe
eclipse-jee-oxygen-3a-win32-x86_64.zip
External JARs 換位置了,之前可以隨便放,現在必須放在 WEB-INF\lib
否則程式執行時會發生 ClassNotFoundException
使用 Tomcat v9.0 搭配 java 10 時,發生
-Djava.endorsed.dirs=C:\Program Files\Apache Software Foundation\Tomcat 9.0\endorsed is not supported.
錯誤,即使將 Run/Debug Configurations/Arguments/VM arguments 內的
-Djava.endorsed.dirs="C:\Program Files\Apache Software Foundation\Tomcat 9.0\endorsed"
刪除,下次執行時,依舊又出現,換成舊版的 java 即可解決

網站使用
apache-tomcat-9.0.7.exe (不能搭配 java 10)
修改 config 下的 server.xml 和 context.xml 請注意權限
若不修改權限,作業系統會搞鬼,讓你以為修改成功,浪費時間抓蟲
Tomcat v6.0 時, server.xml 為
<Context docBase="Main" path="/Kennel" reloadable="true" source="org.eclipse.jst.jee.server:Main">
<Resource name="jdbc/MainDS" auth="Container" type="javax.sql.DataSource" maxActive="4" maxIdle="2" maxWait="4" username="xxxx" password="xxxx" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/?useUnicode=true&amp;amp;characterEncoding=big5"></Resource></Context>

Tomcat v9.0 時, server.xml 不用動, 反而是修改 context.xml
    <Resource 
    name="jdbc/MainDS" 
    auth="Container" 
    type="javax.sql.DataSource" 
    maxTotal="4" 
    maxIdle="2" 
    maxWaitMillis="-1" 
    username="xxxx" 
    password="xxxx" 
    driverClassName="org.mariadb.jdbc.Driver" 
    url="jdbc:mariadb://localhost:3306/?useUnicode=true&amp;characterEncoding=utf8">
    </Resource>
注意其中 maxActive 改成 maxTotal, maxWait 變成 maxWaitMillis
另外 DBCP 也有變化,由
<Resource
    name="jdbc/MainDb"
    scope="Shareable"
    type="javax.sql.DataSource"
    factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
    maxTotal="4" maxIdle="2" maxWaitMillis="-1"
    url="jdbc:mariadb://localhost:3306"
    driverClassName="org.mariadb.jdbc.Driver"
    username="xxxx"
    password="xxxx"
    />
變成
<Resource
    name="jdbc/MainDb"
    scope="Shareable"
    type="javax.sql.DataSource"
    factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
    maxTotal="4" maxIdle="2" maxWaitMillis="-1"
    url="jdbc:mariadb://localhost:3306"
    driverClassName="org.mariadb.jdbc.Driver"
    username="xxxx"
    password="xxxx"
    />







2018年1月16日 星期二

Point Grey 相機之 FlyCapture 編譯 過程記錄

FlyCapture 有 32 和 64位元兩個版本
32位元安裝在 C:\Program Files (x86)\Point Grey Research\FlyCapture2
64位元安裝在 C:\Program Files\Point Grey Research\FlyCapture2

雖然安裝後有 src, 但因權限的關係,無法直接編譯
另外準備一個目錄 D:\SVN_Repository3\vc\FlyCapture
拷貝 include lib lib64 src_x64 src_x86

build src_x64/Examples_vs2013

雖然是 64位元, 不要改變 Configuration Manager 或 Property Pages 的 Platform 為 x64
雖然可以編譯成功,但是無法執行

VB.Net Examples 的 Project 會產生 Type 'FC2Version' is not defined. 之類的錯誤
開啟 Project 的 Properties 選 References, 可以看到
點選 FlyCapture2Managedd_v120, 在按 Reference Paths
加入目錄 C:\Program Files\Point Grey Research\FlyCapture2\bin64\vs2013
即可解決

CSharp Examples 的 Project 會產生如下的錯誤

開啟 Project 的 Properties 選 Build
改 Output path: bin\Debug\
為 Output path: bin\Debug
即可解決

CSharp Examples 的 Project 還會產生如下的錯誤

開啟 Project 的 Properties 選 Reference Paths 加入目錄
C:\Program Files\Point Grey Research\FlyCapture2\bin64\vs2013\
即可解決

CSharp Examples 的 MultiSyncEx_CSharp_vs2013 Project 還會產生如下的錯誤

點選 MultiSyncEx_CSharp_vs2013/References, 按右鍵選 Add References...
勾選 MultiSyncLibraryManaged_v120.dll 和 FlyCapture2Managed_v120.dll 按 OK
刪除錯誤 References FlyCapture2Managed 和 MultiSyncLibraryManaged
即可解決

C Examples 和 C++ Examples 內的 Project 需要各別 Build
唯一會有錯誤的是 FlyCapture2GUI
修改 FlyCap2CameraControl_ILBridge.h 和 FlyCap2CameraSelection_ILBridge.h
#elif (_MSC_VER == 1800)
#using <..\\..\\bin\\vs2013\\FlyCap2CameraControld_v120.dll>
#using <..\\..\\bin\\vs2013\\FlyCapture2Managedd_v120.dll>
#elif (_MSC_VER == 1700)
#elif (_MSC_VER == 1800)
//#using <..\\..\\bin\\vs2013\\FlyCap2CameraControld_v120.dll>
//#using <..\\..\\bin\\vs2013\\FlyCapture2Managedd_v120.dll>
#using <..\\FlyCap2CameraControl\\bin\\Debug\\FlyCap2CameraControld_v120.dll>
#using <..\\FlyCap2CameraControl\\bin\\Debug\\FlyCapture2Managedd_v120.dll>
#elif (_MSC_VER == 1700)
即可解決

點選 C++ Examples/FlyCap2, 按右鍵選 Set as Startup Project, 嘗試執行, 若產生下列錯誤
是因為 FlyCap2 會用到 FlyCapture2GUI 產生的 FlyCapture2GUId_v120.dll
而 FlyCapture2GUId_v120.dll 會用到 FlyCap2CameraControl 產生的
FlyCap2CameraControld_v120.dll 和 FlyCapture2Managedd_v120.dll
若是刪除 FlyCapture2GUId_v120.dll, 及會使用
C:\Program Files\Point Grey Research\FlyCapture2\bin64\vs2013 目錄下可以執行的程式庫
即可執行,至於什麼原因,就不知道了


2018年1月4日 星期四

使用 MOSFET 產生 PWM 電源

MCU 產生 25kHz PWM
因為 MCU 使用 3.3V, 一些 N通道MOSFET Vgs 甚至要 4V(IRFZ44N)
故用 2N7000(N通道) 推動 IRF5305(P通道)
示波器使用顏色
2N7000 Vg 為黃色
2N7000 Vd 為藍色
IRF5305 Vg 為紫色
IRF5305 Vd(out)為綠色

 一開始的設計R1=10K,並沒有使用R2電阻和223電容,Vd = Vg
加上R2(10K)電阻,因為分壓,使得 IRF5305 Vg 在工作範圍內擺動
加上223電容,加快輸出電壓上升
最後改R1=1K, R2=1K
即可加快輸出電壓的下降
缺最後一張圖


用單節18650產生3.0V

18650 電壓範圍 3.6-4.2V
要產生3.3V, 只有找到 TPS63020, TPS63060, TPS63070

LM1117 要求 Vin - Vout = 1.2V
3.6V - 1.2V = 2.4V

使用 TL431
注意在 750 Ohm, 上有一個較高的電壓(12V)
這裡可不能接 18650
Vout = 2.5 * (1 + 4.7 / 22) = 3.0V
PN2222 的 Vb為 3.0V + 0.7V = 3.7V
Ib = (12 - 3.7) / 750 = 11mA (在TL431 的 Ika 1~100mA 範圍內)
PN2222 的最小 β 為 35
Iout(max) = 11 * 35 = 387mA