藤原栗子工作室
人生苦短,只望有朝一日美夢成真。
2025年3月4日 星期二
2025年1月2日 星期四
告別2024~迎接2025
2024年總計讀了八篇的論文:
- Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks(CycleGAN)
- ArcFace: Additive Angular Margin Loss for Deep Face Recognition(翻譯)
- Perceptual Losses for Real-Time Style Transfer and Super-Resolution(翻譯)
- Image-to-Image Translation with Conditional Adversarial Networks(翻譯)
- Analyzing and Improving the Image Quality of StyleGAN
- Instance Normalization: The Missing Ingredient for Fast Stylization
- Distilling the knowledge in a neural network
- Attention Is All You Need
以及三個系列課程: - Applied LLMs Mastery 2024
- 李宏毅_生成式導論 2024
- Mathematics for Machine Learning and Data Science
不過在git上的實作記錄就偏少了,這是2025年必需要改進的部份。
當然除了讀書之外在公司內也帶著同仁一起做了幾個案子,也確認自己的方向是正確的,人工智慧對於企業有絕對的幫助。 所謂的學習是在學習一種模式(pattern),企業的資料是不斷重覆的生成,一定也存在著某種的模式可以學習。
沒有達成的部份就是Rust、Vue、Pytorch都沒有動靜,這也是要檢討的部份。
所以,我要再立下2025年新的目標:
- 讀10篇論文(將yolov5~v11的論文補完,擴散模型、llm相關關鍵議題論文)
- 三個系列課程
- 放棄Rust,改學C++(參考C++ Primer Plus自學)
- Vue3
- 重新復習Hello演算法中的所有演算法
- 公司內成功建置人臉辨識考勤系統
- 讀完Build a Large Language Model (From Scratch),並且自己手刻一發
- 熟悉幾個llm框架(dify)
- 補完強化學習聖經第二部中文翻譯
滾動式增加,要讓2025更充實。
2024年4月9日 星期二
Oracle的預儲程序參數與資料表名稱相同時的異常
Oracle的預儲程序參數與資料表名稱相同時的異常
最近踩了一個坑,主要是一個預儲程序利用給定的參數來做查詢,再將查詢到的資料寫入變數,原本都還很正常,但是突然失效,偏偏單獨的查詢都很正常,遍尋不著,後來同事協助之後終於脫坑。
create or replace procedure test_proc(p_a varchar2) is
begin
select column into v_column from table where column_a = p_a;
end
上面是一個示意的範例,test_proc
這個預儲程序在得到p_a
之後就會去資料表查詢,然後將資料寫入v_column
,但不知道什麼時候,資料表中被加入一個同名欄位,也就是p_a
,這導致了參數中的p_a
就失效了。
這可能就代表著在oracle的預儲程序中,整個上下文還是會以查詢資料表為主,查詢資料表沒有對應欄位名稱的時候才會以變數做為條件?
這很頭痛的是,這是無聲異常,而且還可能造成大量異常,不得不防,以後預儲函數的參數必需要設置的非常怪異,才不會有機會跟未來人命名欄位名稱相同。
2024年3月26日 星期二
Roland F701開箱
ROLAND F701(白色)電鋼琴
自從搬出老家之後,喵小姐一直心心唸唸著想要一台電鋼琴,終於在今年的年初,也就是過年的時候,趁著活動帶著她去一趟竹北鴻韻,雖然這已經是第n次去了。
原本預算是20k,打算買台基本的能在家過過乾癮就好,不過實際到現場按壓幾次之後,喵小姐還是決定把預算突破天際,就買了F701,常言道,捏一下就上去了,這一捏簡直是蛋破小鳥死。但是為了喵小姐的夢想我還是捏上去了。
其實最一開始是希望老泡先生可以學鋼琴,但是他從小就愛敲敲打打,所以最後選擇學習爵士鼓。現在多了一個安咕咕先生,希望他會愛上鋼琴。
購買的時候因為是要安置在三樓,多了樓層費,來的師父在安裝上也非常熟門熟路的,很辛苦,到我家已經是晚上八點多,離開的時候說他還有另外兩家要送,看來在台灣熱愛學習音樂的人真的不少。
F701在DEMO的時候有特別提到可以搭配APP,算是蠻方便的,壓下去的聲音也會隨著手指的力度而有所不同,這是當初喵小姐捨棄初階機的最主要原因。搭配耳機就可以在不擾人清夢的情況下好好練習。而且架子本身也提供一個吊掛耳機的地方,非常方便。
總之,好機,白色更是美的西哩花拉的,搭配活動送了一個升降椅,值得入手。
2024年2月27日 星期二
利用tailwind css設計一個簡易側導覽
最近在嚐試利用前端搭配flask寫網頁,幾個小功能,但是需要一個連結給使用者,所以就想要做一個側導覽功能,初始結構是20美元小助理給的,自己微調一下,符合使用比較重要,大致就是拆成html跟javascript,css的部份直接採用tailwind套版,直觀又快速。
首先是html,版面的部份要切出左側一個區域來給側導覽,然後一個按鈕,側導覽的初始狀態是整個隱藏,經過按鈕點擊來做顯示與隱藏的切換:
<div id="sidebar" class="fixed top-0 left-0 h-full bg-gray-800 transition-transform duration-300 ease-in-out -translate-x-full z-10">
<div class="mt-16">
<ul class="text-white">
<li class="p-4 hover:bg-gray-700"><a href="{{ url_for('Router1') }}">Router1</a></li>
<li class="p-4 hover:bg-gray-700"><a href="{{ url_for('Router2') }}">Router2</a></li>
<li class="p-4 hover:bg-gray-700"><a href="{{ url_for('Router3') }}">Router3</a></li>
<li class="p-4 hover:bg-gray-700"><a href="{{ url_for('Router4') }}">Router4</a></li>
</ul> </div></div>
<button id="toggleNav" class="fixed top-0 left-0 mt-10 p-2 text-white bg-blue-500 rounded z-20 transition-transform duration-300 ease-in-out">
MenuBar
</button>
接著在按扭地方加入一個監聽器,主要是偵測到點擊的時候就做sidebar
屬性-translate-x-full
的切換,然後按鈕的屬性再隨著sidebar
的屬性做變化的判斷
document.addEventListener('DOMContentLoaded', function() {
const toggleNavButton = document.getElementById('toggleNav');
toggleNavButton.addEventListener('click', function() {
const sidebar = document.getElementById('sidebar');
sidebar.classList.toggle('-translate-x-full');
if(sidebar.classList.contains('-translate-x-full')){
toggleNavButton.style.transform = 'translateX(0px)';
} else {
toggleNavButton.style.transform = `translateX(${sidebar.offsetWidth}px)`;
}
});
});
2024年1月30日 星期二
Graph disconnected: cannot obtain value for tensor KerasTensor
Graph disconnected: cannot obtain value for tensor KerasTensor
TensorFlow版本:2.4.0
最近在嚐試寫PGGAN,參考來源程式碼在過程中做了轉型:
input_img = tf.keras.layers.Input(shape=(4, 4, 3))
input_img = tf.cast(input_img, tf.float32)
x1 = tf.keras.layers.AveragePooling2D()(input_img)
這種情況下每次都會跳出異常訊息:
Graph disconnected: cannot obtain value for tensor KerasTensor
搞了三天三夜,不管怎麼改變寫法,改成lambda
、或是tf.dtypes.cast
都不行:
input_img = tf.dtypes.cast(input_img, tf.float32)
結果我就很生氣的把變數名稱改了…
input_img = tf.keras.layers.Input(shape=(4, 4, 3))
input_img2 = tf.cast(input_img, tf.float32)
x1 = tf.keras.layers.AveragePooling2D()(input_img2)
就好了,對,沒錯,就好了。恭喜我自己,怪了,那他是怎麼訓練完成的。
2024年1月25日 星期四
PyGWalker
Python Tool: PyGWalker
python
pygwalker
data visualization
機器學習的一個重要過程就是資料分析,在做資料分析的時候最需要的就是一個方便的資料可視化軟體,AI總是需要有BI的伴隨。BI工具著名的有QLIK、Tableau、PowerBI,如果是Python的可視化套件就更是百家爭鳴。
不過最近看到一個讓我驚豔的套件,那就是PyGWalker,簡單幾段程式就讓我擁有類似於Tableau的界面,這讓我在資料分析上多了不少便利性。
安裝
這次的測試是在conda,所以記得先建立一個虛擬環境:
conda create --name PyGWalkers
確定一下環境有沒有建立:
conda env list
然後轉入虛擬環境:
activate PyGWalkers
安裝:
conda install -c conda-forge pygwalker
安裝ipykernel:
conda install ipykernel
註冊kernel(要記得註冊,不然在執行中就無法選擇對應的kernel):
python -m ipykernel install --user --name PyGWalkers --display-name "Python (PyGWalkers)"
安裝確認:
conda list
啟動:
jupyter notebook
實作測試
從官方範例來看,就是簡單的兩步:
- 載入資料(csv -> dataframe)
- 執行
# 載入需求套件
import pandas as pd
import pygwalker as pyg
# 指定資料來源路徑
file_path = r'your file path'
# 載入dataframe
df = pd.read_csv(file_path)
# 確認資料是否確實載入
df.head()
# johnnie walker
pyg.walk(df)
執行之後就會進入一個互動式的UI介面,是不是很讓人驚豔?剩下的就只是拖拖拉拉來觀察資料之間的關聯性了,這對小眾資料處理人員來說是非常便利的工具。
Dify + Whisper Asr Webservice
這邊假設你已經成功啟動dify的服務
Whisper Asr Webservice
Whisper Asr Webservice是一個很方便的工具,因為作者已經幫忙把語音轉文字的服務API化,對於應用端來說只要做常規的API呼叫就可以滿足應用上的需求。
啟動Whisper Asr Webservice
啟動服務最快的方法就是docker:
不過要注意自己的cuda版本是否有對應,如果最新版的無法啟動的話就要降版,這取決於你的硬體設備。
Openapi設置
成功啟動docker container之後,可以直接連接到應網頁,http://你的ip:9000/docs 沒意外的話你會看到下圖:

點擊上圖紅框處的
openapi.json
,系統會開立一個新的視窗,一堆的json格式的字串,複製出來之後,拿到你喜歡的平台去做排版,排版之後我們要做兩個處理,這樣才能成功在dify中引用:在

info
與path
的中間加入servers
修正

requestBody
中的content-type
,原本是multipart/form-data
,修正為multipart/form-data; boundary=----WebKitFormBoundarydzemBAPhdeDfTCfR
更多關於模型的選擇與細部配置請自行參考Whisper Asr Webservice官方文件說明。
Dify - 自定義工具設置
進入Dify之後,我們就可以自定義工具,首先點擊工具:

點擊自定義之後,點擊建立自定義工具:

自己定義名稱,然後將剛剛調整的openapi貼上,就可以成功建立一個自定義工具:

Dify - 應用流程開發
現在,你已經可以直接在dify的workflow中取用自定義的語音轉文字的工具:

把一些參數設置一下:

測試應用:

把取到的文字再弄成問答集:
有興趣的話,可以再把問答集轉成主持人與來賓的對話,那就是一個podcast了。
如果是公司會議記錄,就可以讓與會人員每天聽聽老闆愛的盯寧了。