顯示具有 LLama AI 標籤的文章。 顯示所有文章
顯示具有 LLama AI 標籤的文章。 顯示所有文章

2025年12月30日 星期二

MySQL to Data Frame

 在進行機器學習或深度學習模型訓練時,將 MySQL 資料轉換為模型可吸收的格式(通常是 Tensor 或 NumPy Array)是一個標準的資料管線(Data Pipeline)流程。

以下是將 MySQL 資料處理並輸入模型的四個主要階段:


1. 資料提取 (Data Extraction)

首先,你需要從 MySQL 中讀取資料。最常用的工具是 Python 的 pandas 庫配合資料庫連接器。

  • 推薦工具: SQLAlchemy 或 mysql-connector-python。

  • 操作方式:

    Python
    import pandas as pd
    from sqlalchemy import create_engine
    
    # 建立資料庫連線
    engine = create_engine('mysql+mysqlconnector://user:password@host:port/database')
    
    # 使用 SQL 語法讀取資料到 DataFrame
    query = "SELECT * FROM training_table"
    df = pd.read_sql(query, engine)
    

2. 資料清洗與預處理 (Data Preprocessing)

MySQL 存儲的原始資料通常無法直接進入模型,需要經過以下處理:

A. 處理缺失值 (Missing Values)

  • 刪除: 丟棄含有空值的欄位。

  • 填補: 使用平均值、中位數或眾數填補。

B. 特徵編碼 (Feature Encoding)

模型只能處理數字,因此類別型資料(如:性別、城市)需要轉換:

  • One-Hot Encoding: 用於無順序關係的類別。

  • Label Encoding: 用於有順序關係的類別。

C. 數值縮放 (Feature Scaling)

為了防止某些數值過大的特徵主導模型訓練(例如「年齡」與「年收入」的差異):

  • 標準化 (Standardization): 使資料符合 $z = \frac{x - \mu}{\sigma}$。

  • 歸一化 (Normalization): 將數值縮放到 $[0, 1]$ 區間。


3. 資料轉換與切分 (Data Transformation & Splitting)

在輸入模型前,必須將 DataFrame 轉換為矩陣格式,並區分特徵與標籤。

  1. 分離特徵 (X) 與標籤 (y):

    Python
    X = df.drop('target_column', axis=1).values
    y = df['target_column'].values
    
  2. 切分訓練集與測試集:

    Python
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    

4. 輸入模型 (Model Feeding)

視你使用的框架而定,輸入方式略有不同:

  • Scikit-learn: 直接傳入 NumPy 陣列。

    model.fit(X_train, y_train)

  • TensorFlow/PyTorch: 需轉換為 Tensor 格式。

    Python
    import torch
    X_train_tensor = torch.tensor(X_train, dtype=torch.float32)
    

進階建議:大數據處理

如果你的 MySQL 資料量極大(數千萬行以上),直接一次性讀取會導致記憶體(RAM)崩潰。建議採取以下策略:

  1. 分批讀取 (Chunking): 使用 pd.read_sql(query, engine, chunksize=10000) 分批處理。

  2. ETL 工具: 先將資料從 MySQL 導出成 .parquet 或 .csv 格式,再由模型讀取。

  3. 使用 Dataset API: 像是 TensorFlow 的 tf.data.Dataset 可以建立流式處理管線,邊讀取邊訓練。

總結流程圖

您目前的資料量大約是多少?或是您正打算使用哪種模型框架(如 XGBoost 或 TensorFlow)? 我可以針對您的具體情況提供更精準的程式碼範例。

2025年10月12日 星期日

OpenAI API 模型在「純文字 vs 視覺(能處理影像輸入)」能力與價格比較

 OpenAI API 模型在「純文字 vs 視覺(能處理影像輸入)」能力與價格比較。資料來自官方文檔與社群觀察。請當作參考,實際以官方最新文件為主。


模型分群與特性比較(文字 vs 視覺輸入能力)

模型/系列是否支援影像輸入主要用途 / 限制補充說明
GPT-3 / GPT-3.5 系列(如 gpt-3.5-turbo 等)不支援純文字生成、對話、補完這些模型只接受文字輸入,不處理圖片
GPT-4(文字版)有特定變體支援若版本為多模態(vision)則可處理影像 + 文字GPT-4V / GPT-4 with vision 支援圖像輸入
GPT-4o / GPT-4o mini支援(multimodal)可處理文字、影像、音訊(部分能力)GPT-4o 是 omni 模型,支援視覺 + 聲音 + 文本 維基百科+2OpenAI 平台+2
GPT-Image-1是(主要為影像)圖像生成與部分影像理解可接受文字 + 圖像輸入 / 輸出圖像 OpenAI+2OpenAI 平台+2
GPT-4.1 / 系列(含 mini / nano)支援多模態用於複雜任務、長上下文官方文檔指出它屬於 vision-enabled 模型系列 Microsoft Learn+2OpenAI+2
o-series reasoning models支援視覺用以多模態分析與推理Azure 文檔指出 o 系列與 GPT-4.1、GPT-4o 等皆為 vision-enabled 模型 Microsoft Learn

價格概況(文字 token 與影像 token / 輸出成本)

以下是各模型在文字與影像/多模態情境下的典型價格比較(若公開可查)。

模型文字輸入/輸出價格影像輸入 / 處理價格備註 /特殊規則
GPT-Image-1文字輸入 $5 / 1M tokens OpenAI圖像輸入 $10 / 1M image tokens;圖像輸出 $40 / 1M image tokens OpenAI
GPT-4o / GPT-4o miniGPT-4o:文字輸入 $2.50 / 1M tokens,輸出 $10 / 1M tokens 維基百科+2OpenAI 平台+2
GPT-4o mini:輸入 $0.15 / 1M,輸出 $0.60 / 1M Reuters+1
使用影像輸入時,影像會被轉換為 token 或 tiles 處理,產生額外成本。實際被收費的 token 數可能乘以放大係數(社群中有報告影像 token 被放大)OpenAI 社區+2OpenAI 社區+2
GPT-4.1 / 系列在 OpenAI 平台上標示:輸入 $2 / 1M tokens,輸出 $8 / 1M tokens OpenAI+1若有影像輸入,其 token 計費邏輯與 GPT-4o 類似(影像拆片、映射 token)
GPT-4(多模態版)傳統文字定價(取決於版本)處理影像輸入時會額外計算 token / tiles 處理成本

關鍵觀察與警示

  1. 影像 token 被放大/計算方式複雜
    使用影像輸入時,OpenAI 會將影像拆成 tiles 或塊(tile tokens),並對每塊計算輸入 token 數。這會導致影像輸入的 token 成本遠高於純文字輸入。社群中有使用者指出 GPT-4o-mini 的影像 token 被乘以大係數後計費。OpenAI 社區

  2. 價格動態調整與未公開部分
    OpenAI 不定期推出新模型(如 GPT-4.1, GPT-5)或淘汰舊模型(如 GPT-4.5),定價與支援能力會變。
    有些模型功能(特別是多模態、影像處理)在不同地域/計畫中可能受限或尚未開放。

  3. 效率 vs 成本取捨
    若任務主要是文字處理,選純文字模型(如 GPT-3.5 / GPT-4.1 的文字版本)通常成本最低。
    如果包含影像理解,必須選支援 vision 的模型,但要預估影像 token 成本可能遠高。


模型與標準定價表

模型名稱是否多模態(可處理影像/視覺輸入)輸入 token 價格(USD/1M tokens)輸出 token 價格(USD/1M tokens)備註 /來源 /不確定處
gpt-3.5-turbo否約 $0.0015約 $0.0020此為舊資料推估(官方定價頁未明確列)
GPT-4 Turbo / GPT-4 (Turbo 版本含 vision preview)有(視具體版本)$10.00$10.00GPT-4 Turbo / vision Preview 定價為 $10 input + $10 output apidog
GPT-4(標準)有部分版本支援$30.00$60.00官方定價頁提及 gpt-4 輸入 $30 / 輸出 $60 apidog+1
GPT-4 32k 上下文版本同上$60.00$120.00翻倍於標準版本 apidog
gpt-4o (omni 多模態)是$2.50$10.00Wikipedia 上有此價格說明 維基百科
gpt-4o mini是$0.15$0.60同 Wikipedia 描述 維基百科
GPT-5多模態(假設)$1.25$10.00OpenAI “Compare models” 頁面有此定價 OpenAI 平台
GPT-5 mini / nano(可能支援)$0.25 / $0.05$2.00 / $0.40同上頁面資料 OpenAI 平台
o1-pro多模態或高能力模型$150.00$600.00TechRepublic 報導 o1-pro 的高價格 TechRepublic
GPT-4.5多模態$75.00$150.00在 Wikipedia 有此資料(不過有標示可能已退場) 維基百科

2025年9月17日 星期三

分拆 GIF 並列出變紅球裡的字母

 我可以做到,但你上傳的是一張靜態影像(單一畫格)。

若要「分拆 GIF 並列出變紅球裡的字母」,請上傳原始 GIF 動畫檔;

我就能直接替你跑分析。


先給你本地操作的做法:

一、把 GIF 分拆成多張圖片 - 使用 ffmpeg - 建資料夾 frames - 指令:ffmpeg -i input.gif -vsync 0 frames/frame_%03d.png - 或使用 ImageMagick - 指令:magick input.gif -coalesce frames/frame_%03d.png 二、自動找出變紅的球,並讀取球內字母(Python) 前置: - 安裝套件:pip install opencv-python numpy pytesseract pillow - 安裝 Tesseract OCR - macOS: brew install tesseract - Ubuntu: sudo apt-get install tesseract-ocr - Windows: 安裝程式並把 tesseract.exe 路徑加到 PATH 程式(將它存為 find_red_letters.py;frames 內已是分拆後的 PNG): - 這段會: 1) 用第一張畫格找出 4×4 的圓位置並對每個圓做一次 OCR,得到每個格子的字母 2) 逐格逐畫格檢查是否變成紅色 3) 列出「首次變紅的順序」與「所有曾變紅的字母(去重)」;並輸出標註圖以便確認 from pathlib import Path import cv2, numpy as np, pytesseract frames_dir = Path("frames") frame_files = sorted(frames_dir.glob("frame_*.png")) assert frame_files, "frames 資料夾是空的" def read_img(p): return cv2.imread(str(p), cv2.IMREAD_COLOR) # 1) 在第一張畫格找 4×4 圓位置(用霍夫圓或以格點自動分群) first = read_img(frame_files[0]) gray = cv2.cvtColor(first, cv2.COLOR_BGR2GRAY) gray = cv2.medianBlur(gray, 5) # 依影像大小,調整 param1/param2/minRadius/maxRadius circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, dp=1.2, minDist=first.shape[1]//8, param1=120, param2=40, minRadius=first.shape[1]//16, maxRadius=first.shape[1]//6) assert circles is not None and len(circles[0])>=16, "找不到足夠的圓,請調整霍夫參數" # 取前 16 顆,並依 y 再 x 排序,成 4x4 circs = np.round(circles[0][:, :3]).astype(int) # (x,y,r) circs = sorted(circs, key=lambda c:(c[1], c[0])) # 分成 4 列後各列再依 x 排序,避免 y 軸微抖動 rows = [sorted(circs[i*4:(i+1)*4], key=lambda c:c[0]) for i in range(4)] circs = [c for row in rows for c in row] # 依格序 0..15 # 2) 先在第一張畫格 OCR 出每個圓的字母 def crop_circle(img, x,y,r, pad=0.85): rr = int(r*pad) y1,y2 = max(0,y-rr), min(img.shape[0], y+rr) x1,x2 = max(0,x-rr), min(img.shape[1], x+rr) crop = img[y1:y2, x1:x2] mask = np.zeros(crop.shape[:2], np.uint8) cv2.circle(mask, (crop.shape[1]//2, crop.shape[0]//2), rr, 255, -1) bg = np.full_like(crop, 255) crop = np.where(mask[...,None]==255, crop, bg) # 圓外白底 return crop letters = [] for (x,y,r) in circs: patch = crop_circle(first, x,y,r) grayp = cv2.cvtColor(patch, cv2.COLOR_BGR2GRAY) grayp = cv2.threshold(grayp, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)[1] # 單字母識別 config = "--psm 10 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ" txt = pytesseract.image_to_string(grayp, config=config).strip().upper() if not txt: txt = "?" letters.append(txt) # 3) 逐畫格偵測該圓是否為紅色(HSV 兩段紅) def is_red_circle(img, x,y,r): patch = crop_circle(img, x,y,r) hsv = cv2.cvtColor(patch, cv2.COLOR_BGR2HSV) lower1 = np.array([0, 80, 80]); upper1 = np.array([10,255,255]) lower2 = np.array([170,80,80]); upper2 = np.array([180,255,255]) mask = cv2.inRange(hsv, lower1, upper1) | cv2.inRange(hsv, lower2, upper2) # 只統計圓內 circle_mask = np.zeros(mask.shape, np.uint8) rr = min(patch.shape[0], patch.shape[1])//2 cv2.circle(circle_mask, (patch.shape[1]//2, patch.shape[0]//2), rr, 255, -1) ratio = (mask & circle_mask).sum() / (circle_mask.sum()+1e-6) return ratio > 0.35 # 門檻可依實際調整 first_time_red = [] # 依首次變紅順序 seen = set() red_map = {i:[] for i in range(16)} # 每格在哪些畫格紅 for fi, fpath in enumerate(frame_files): img = read_img(fpath) turned = [] for i,(x,y,r) in enumerate(circs): if is_red_circle(img, x,y,r): red_map[i].append(fi) if i not in seen: seen.add(i) first_time_red.append((fi, i, letters[i])) turned.append(i) # 可選:輸出標註影像檢查 if turned: vis = img.copy() for i in turned: x,y,r = circs[i] cv2.circle(vis, (x,y), r, (0,0,255), 4) cv2.putText(vis, letters[i], (x-r, y-r), cv2.FONT_HERSHEY_SIMPLEX, 1.2, (0,0,255), 3) cv2.imwrite(str(frames_dir / f"annot_{fi:03d}.png"), vis) first_time_red.sort(key=lambda t:t[0]) # 依畫格順序 ordered_letters = [t[2] for t in first_time_red] unique_letters = sorted({t[2] for t in first_time_red}) print("首次變紅順序的字母:", "".join(ordered_letters)) print("曾變紅(去重)字母集合:", "".join(unique_letters)) print("各格位置對應字母(從上到下、左到右 4x4):", letters) 使用說明與調參: - 若找不到 16 顆圓,調整 Hough 圓參數 minDist、param2、minRadius、maxRadius。 - 若紅色偵測過嚴或過鬆,調整 HSV 門檻與 ratio 門檻(0.35)。 - Tesseract 若誤判,可把第一張畫格的 letters 改成你人工校正的字母清單,之後只靠顏色判斷即可。 附註:在你上傳的單張畫格中,4×4 的字母為: C O D E D E D K H C Y Q A M P V 但哪些有「變紅」必須看 GIF 動畫;請把 GIF 檔傳上來,我可以直接幫你跑出結果並列出紅球字母。

2025 年主流 API 可用模型分類整理

✅ 程式碼方式查詢

from openai import OpenAI client = OpenAI() models = client.models.list() for m in models.data: print(m.id)

📋 目前常見模型總覽(分類列出)

🔹 Chat / Text 模型

模型 ID說明
gpt-4o多模態模型(圖像+文字+語音)
gpt-4高準確度文字模型
gpt-4-turbo快取版本 GPT-4(便宜快)
gpt-3.5-turboCP 值高,適合輕量任務

🔹 Embedding 模型(轉向量)

模型 ID維度
text-embedding-3-large3072
text-embedding-3-small1536
text-embedding-ada-0021536

🔹 Whisper(語音轉文字)

模型 ID功能
whisper-1語音轉文字

🔹 TTS(文字轉語音)

模型 ID品質
tts-1普通
tts-1-hd高畫質

🔹 Fine-tuning(可微調)

模型 ID是否支援微調
gpt-3.5-turbo✅
davinci-002, babbage-002✅

🔹 停用舊模型(不可再用)

模型 ID備註
text-davinci-003舊版,已停用建議
curie, babbageGPT-3 系列,已停用



以下為 OpenAI API 主要模型的價格與 Token 限制(截至 2025 年中,依 OpenAI 定價頁):


🧠 Chat Models(對話模型)

模型上下文長度(tokens)輸入價格(每 1K tokens)輸出價格(每 1K tokens)
gpt-4o (2024/05)128,000$0.005$0.015
gpt-48,192 / 32,768$0.03$0.06
gpt-4-turbo (gpt-4-1106-preview 等)128,000$0.01$0.03
gpt-3.5-turbo (2023/06)4,096 / 16,385$0.0015$0.002

🧲 Embedding Models

模型名稱維度價格(每 1K tokens)
text-embedding-3-large3072$0.00013
text-embedding-3-small1536$0.00002
text-embedding-ada-0021536$0.0001

👁️‍🗨️ Vision(影像輸入)

模型支援圖像價格(約略)
gpt-4o✅同上:依輸入 token / output token 計費
gpt-4-vision-preview✅視覺輸入計價為:每張圖約 $0.01~$0.02(根據解析度)

🔉 Whisper(語音轉文字)

模型價格(每分鐘音訊)
whisper-1$0.006 / minute

🔊 TTS(文字轉語音)

模型品質等級價格(每 1K characters)
tts-1標準$0.015
tts-1-hd高品質$0.030

📌 Token 定義提醒

1 token ≈ 4 個英文字母(或 0.75 個中文字)
例如:「用一句話說明 ROS」大約 10–12 tokens


如需特定模型版本(如 gpt-4.1-mini、gpt-3.5-turbo-0125)定價,需查詢 OpenAI 帳號的對應方案或企業合約。


gpt-4-0613

gpt-4

gpt-3.5-turbo

gpt-audio

gpt-5-nano

gpt-audio-2025-08-28

gpt-realtime

gpt-realtime-2025-08-28

davinci-002

babbage-002

gpt-3.5-turbo-instruct

gpt-3.5-turbo-instruct-0914

dall-e-3

dall-e-2

gpt-4-1106-preview

gpt-3.5-turbo-1106

tts-1-hd

tts-1-1106

tts-1-hd-1106

text-embedding-3-small

text-embedding-3-large

gpt-4-0125-preview

gpt-4-turbo-preview

gpt-3.5-turbo-0125

gpt-4-turbo

gpt-4-turbo-2024-04-09

gpt-4o

gpt-4o-2024-05-13

gpt-4o-mini-2024-07-18

gpt-4o-mini

gpt-4o-2024-08-06

chatgpt-4o-latest

o1-mini-2024-09-12

o1-mini

gpt-4o-realtime-preview-2024-10-01

gpt-4o-audio-preview-2024-10-01

gpt-4o-audio-preview

gpt-4o-realtime-preview

omni-moderation-latest

omni-moderation-2024-09-26

gpt-4o-realtime-preview-2024-12-17

gpt-4o-audio-preview-2024-12-17

gpt-4o-mini-realtime-preview-2024-12-17

gpt-4o-mini-audio-preview-2024-12-17

o1-2024-12-17

o1

gpt-4o-mini-realtime-preview

gpt-4o-mini-audio-preview

o3-mini

o3-mini-2025-01-31

gpt-4o-2024-11-20

gpt-4o-search-preview-2025-03-11

gpt-4o-search-preview

gpt-4o-mini-search-preview-2025-03-11

gpt-4o-mini-search-preview

gpt-4o-transcribe

gpt-4o-mini-transcribe

o1-pro-2025-03-19

o1-pro

gpt-4o-mini-tts

o3-2025-04-16

o4-mini-2025-04-16

o3

o4-mini

gpt-4.1-2025-04-14

gpt-4.1

gpt-4.1-mini-2025-04-14

gpt-4.1-mini

gpt-4.1-nano-2025-04-14

gpt-4.1-nano

gpt-image-1

codex-mini-latest

gpt-4o-realtime-preview-2025-06-03

gpt-4o-audio-preview-2025-06-03

o4-mini-deep-research

o4-mini-deep-research-2025-06-26

gpt-5-chat-latest

gpt-5-2025-08-07

gpt-5

gpt-5-mini-2025-08-07

gpt-5-mini

gpt-5-nano-2025-08-07

gpt-3.5-turbo-16k

tts-1

whisper-1

text-embedding-ada-002