2023-08-01|閱讀時間 ‧ 約 6 分鐘

今天上班完全沒做正事

不是摸魚,是因為前幾天上班超認真,處理了一堆事,今天突然就沒事了,運氣真好,希望不要被主管發現我現在沒事做在聽歌~~~

https://youtu.be/8MG--WuNW1Y?t=37

我們~ 如果又一次錯過~ 不敢按委買的手~

我會多麼剝奪~ 當那紅燈來的時~候~

如果可以~ 我想和你~ 回到低檔相~遇~

讓時間停止 勇敢買進~

只想擁抱 緯創廣達英業達~ 賣掉國泰金~

一眨眼~ 一瞬間~ 一套牢就是永遠~

不 會 變~~~ (嗚 嗚)

那個 嗚嗚 是本來就有的


話說,

在這篇 午餐煮了泡麵後才發現沒筷子.. 之後,本來想每天都下載買賣日報來建立自己的資料庫,結果沒幾天就漏一天,實在是...不知道其他人是怎麼下載買賣日報的?那麼多檔要怎麼下載?手動慢慢載?能用買的嗎?

本來想寫程式自動抓,但除了不熟網頁技術,還有個比較麻煩的問題,就是下載前需要輸入驗證碼,完全不知怎麼自動處理,小時不讀書...可憐哪。

趁著最近 AI 話題這麼火,想說乾脆來試試用 AI 辨識那些驗證碼圖片。其實自己也頗為好奇,現在的技術,可以讓一個沒太多相關知識的普通人,做到什麼程度。

最後大概花了一周摸索,以下是過程記錄。

實例 九張驗證碼圖片

網路上有好幾套 AI 框架,隨便選了谷歌的 TensorFlow 來用,慢慢照著官網教學,隨便拼湊了一個 AI 模型,關鍵程式碼如下。

可以看到,我的 AI 模型,叫做 18號。

# AI 18號​
class Ai18(tf.Module):
  def __init__(self, n, initializer):
    self.conv1 = Conv2D(16, [3, 3], tf.nn.relu, 'conv1')
    self.conv2 = Conv2D(16, [5, 5], tf.nn.relu, 'conv2')
    self.dense1 = Dense(n, initializer, 'dense1')
    self.dense2 = Dense(n, initializer, 'dense2')
    self.dense3 = Dense(n, initializer, 'dense3')
    self.dense4 = Dense(n, initializer, 'dense4')
    self.dense5 = Dense(n, initializer, 'dense5')

  @tf.function
  def __call__(self, x):
    x = self.conv1(x)
    tf.nn.max_pool2d(x, [1, 2, 2, 1], [1, 1, 1, 1], padding="VALID")
    x = self.conv2(x)
    tf.nn.max_pool2d(x, [1, 2, 2, 1], [1, 1, 1, 1], padding="VALID")
    x = tf.reshape(x, (x.shape[0], -1))
    x = tf.nn.dropout(x, rate=0.1)
    x1 = self.dense1(x)
    x2 = self.dense2(x)
    x3 = self.dense3(x)
    x4 = self.dense4(x)
    x5 = self.dense5(x)
    return [x1, x2, x3, x4, x5]


就這麼簡單。

懂得人應該看得出來有點亂拼湊。

個人沒太多這方面的數學知識,就搜尋一下大家怎麼寫就跟著寫。然後把網友整理好的 5000 張圖丟給18號。不知道怎麼形容,反正就是把圖片轉成數字矩陣,傳給18號,再寫一點簡單的程式,更新她的大腦。

一樣的 5000 張,跟看考古題一樣,給她重複看了 20 次左右,花了不到一小時吧忘了 (我沒用GPU,有用的話可以快好幾倍),學到最後差不多能答對99%以上!

剛剛是考古題的部分,再來要拿18號從來沒看過的 1000 張圖考她,測試她到底是背答案,還是真的有學會

先抽考五題,小試身手。

# 五題在這個 test_dataset 裡面
test_dataset = generate_datasets()

# 叫醒 18號
ai18 = load_model((WORK_PATH/'ai18').as_posix())

# 開始測試​
testing(ai18, test_dataset)


答題結果

圖片上面是18號的回答,答對了@@

又對

又對

還是對..

全對..

隨手亂拼湊的18號AI寶寶,可以五題全對,真扯。

最後把沒看過的 1000 張全拿去考她,測試結果,答題正確率高達 86.9%!雖然沒突破87%,但我覺得很驚人。

簡單結論一下,

其實圖片沒有到很難,變化性再高一點應該就沒那麼好做了。但一個沒太多相關數學背景的人,隨手就能做一個辨識驗證碼的 AI 模型,真的扯。

太累了,目前先研究到這邊,歡迎有興趣的讀者或專家留言指導,感恩。

在以靜制動的日子結束前,如果還有時間,我再來研究怎麼教她幫我填

好答案順便下載買賣日報。

又正戰鬥力又高的人造人18號

當年看到18號親吻克林的畫面,還在讀國小的我,直接,臉紅心跳。回想起來還真有趣。

如果問我 AI 是不是泡沫,我不知道,

但我的18號肯定不是。

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.