學習
#11 成長心態:從卡羅·杜維克的《心態致勝》探索自我進化之路
在當今這個競爭激烈的社會中,如何培養一個正確的心態,成為了每個人不得不面對的挑戰。
特別是對於愛看書的你我,書籍的影響力無疑是塑造我們思想和行為的重要途徑。
卡羅·杜維克(Carol Dweck)的《心態致勝》一書,為我們提供了一個重要的視角:成長心態(growth mindset)與定型心態(fixed mindset)的差異,以及如何培養成長心態來促進個人的自我成長。
在本文中,我們將以“成長心態”為重點,來探討這本書如何影響我們教育孩子以及自我進化的觀念。
我們會借鑑杜維克教授的理論,深入分析成長心態的四個步驟,並提供具體事例來支持我們的觀點。
定型心態與成長心態的核心差異
在《心態致勝》一書中,杜維克教授指出,人類大致上可以分為兩種心態:定型心態和成長心態。
定型心態的人認為自己的能力是固定不變的,因此在面對挑戰和批評時往往感到無力和逃避。他們視挑戰為威脅,將批評看作是對自我的否定[^1]。
#4 《卡片盒筆記法》: 知識管理、學習、寫作的好工具
我們每天都暴露在海量的知識與資訊,卻往往在面對真正的創作與思考時感到無從下手。
想要有效管理知識、激發創造力,這不僅是作家或學者的渴望,也是所有愛書人的共同追求。
《卡片盒筆記法—最高效思考筆記術》是一場關於學習、思考和創作的轉變歷程。
閱讀《卡片盒筆記法》的啟示
首先,讓我們來聊聊這本書的作者——Sönke Ahrens。
他的作品不僅深受讀者好評,更是許多追求高效學習與寫作的人士的福音。
Ahrens 透過詳細解析德國社會學家Niklas Luhmann 的工作方法,將其轉化為現代知識工作者可行的筆記系統。
而德國社會學家Niklas Luhmann,這位生產力驚人的學者,以其獨創的卡片盒筆記法撰寫出了70本專著與400篇論文,其成就足以讓任何人嘆為觀止。
不得不問,這究竟是怎樣的一套筆記法,能讓一個人的學術成就如此豐碩?
答案藏在 Ahrens 的書中 《卡片盒筆記法》,而我在實踐這套方法後,也有了自己的心得與體會。
利用 Google Cloud Run 建置網站,佈署 FastAPI 環境
透過 Severless 技術來佈署網站以及 WEB API 環境可以更快速地進行開發工作。
優點是透過每次的 CI 佈署,第一時間可以獲得產品環境的 Feedback,對比起傳統的佈署方式 ( 需要維護應用程式的基礎架構,包含伺服器、資料庫等 ), 不必考慮基礎架構的維護和擴展,只需要專注在撰寫應用程式。
缺點 : 服務是需要付費的。 但透過彈性的計費方式,閒置時不會產生額外成本,對於多產品、少流量的模式來說也許是更有效的資源運用模式。
如何佈署到 Cloud Run 上
0. 建立 main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
1. 建立 requirements.txt 並放入以下內容
fastapi==0.96.0
uvicorn==0.22.0
2. 建立 Dockerfile
GCR 背後的技術有一部分其實就是 Docker,如果熟悉 Docker 的話,可以很快速地利用GCR。
FROM python:3.11-slim
ENV PYTHONUNBUFFERED True
ENV APP_HOME /app
WORKDIR $APP_HOME
COPY . ./
RUN pip install --upgrade pip
COPY requirements.txt .
RUN pip install -r requirements.txt
EXPOSE 8080
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"]
Google Cloud Run 預設使用 Port : 8080。
第一次環境佈署所需要的檔案就這三個,main.py、Dockerfile、requirements.txt。
佈署到 Google Cloud Run
安裝 gcloud command line
gcloud 是 Google Cloud Platform 的命令行工具,它提供了一個簡單的方法來管理您在 GCP 上的資源。以下是安裝和使用 gcloud 的基本步驟:
前往 Google Cloud SDK 官方網站 下載對應作業系統的安裝檔案。
安裝 Cloud SDK,按照安裝提示進行操作,並選擇您需要安裝的元件。您可以在安裝過程中選擇安裝 gcloud CLI。
安裝完成後,在終端或命令提示字元中輸入 gcloud --version
檢查安裝是否成功。
gcloud 基礎設定
gcloud init
:初始化 gcloud CLI,該指令會提示登錄 Google 帳戶,並選擇您要使用的 GCP 項目。gcloud config set project PROJECT_ID
:設定 GCP Project ID,以便 gcloud CLI 與該項目交互使用。gcloud auth login
:登錄 Google 帳戶。
透過 gcloud 佈署
gcloud run deploy fastapi-app --source .
選擇佈署區域與允許部署:
這樣就可以將 FastAPI 應用程式成功佈署到 Google Cloud Run 上了。
現在無須手動將 Docker 映像檔上傳到 Google Artifact Registry,在執行 gclou deploy 時就會幫忙上傳 cloud storage & Registry 中了,但需要注意記得定期清理 cloud storage
(佈署一次一個檔案),否則會收儲存費用。
測試是否正常運行
若佈署成功的話,會在 Terminal Console 中看到網址,點下去就可以成功訪問網站囉!
感想
Google Cloud Run 是一個功能強大的 Severless 平台,可以幫助開發人員快速地佈署和運行容器化應用程式,同時提供高可用性、可靠性和安全性。
關於對應的建置,其實 Google Cloud Run 省去了很多麻煩,相對應的也少掉了很多後端所需要的知識,比如說像 Docker 的建置、 CORS 設定等,如果不熟的開發者,可能在設定上,會遇到不少問題,但對應的討論以及除錯的討論串是比較少的。
AutoEncoder 自動編碼器來建構生成模型
對於像是把一個數字變成一個影像的作法,通常是透過生成模型來達成, AutoEncoder 自動編碼器則是深度學習中常見最簡易的生成模型。
AutoEncoder 的運作原理
AutoEncoder 是透過一個 Encoder 編碼器與一個 Decoder 解碼器的組合來實作生成模型的機制。
編碼的過程有點像是將資料濃縮、擷取,降維到較小維度的空間,而解碼則是相反的過程,類似於將較小維度空間的資料重建、還原、升維到原始維度的空間。
在 AI 的領域中,這種濃縮的資訊通常以 z 來表示, z 所存在的空間稱為潛在空間。
AutoEncoder 模型在訓練好之後,只需要將 Encoder 移走,透過給予 Decoder 解碼器隨機潛在空間的值,就可以生成所需要的影像。
換句話說,在 AutoEncoder (AE) 架構中,通常最後在使用的部分都是已經訓練完成的 Decoder 解碼器 。
[閱讀全文…]神經網路模型的資料預處理
如果要使用 AutoKeras 這個深度學習的框架,對於資料集的預處理是非常重要的。現有的許多資料集為了學習方便,在下載時往往已經有人幫你預處理完畢,讓學習的過程中不用再去處理瑣碎繁瑣的預處理,整理下面幾種常見的資料預處理方法。
為什麼資料正規化 Normalization 會讓模型的表現較好 ?
[閱讀全文…]Python – List 的用法與常用操作
Python 中的 list 是一種常用的資料結構,經過語言優化後功能強大。 List 跟 C++的陣列 array 很類似,是由有順序的 element 所匯集而成。
可以用 [ ] 括號來建立 list,其中的元素必須以逗號分隔。
# 建立三個元素的 list, 並且命名為 alist
alist = [ 1, 2, 3]
list 與陣列不同的地方在於 list 的每個元素可以是不同型別的元素,例如混雜字串與數字的陣列。
combined_list = [1, "One", 2, "Two"]
list 的取用使用索引 index, 索引可以從 0 -> 元素數量 -1,或者反過來,從 -1 (最後一個) 到 – ( 元素數量)。
>>> alist = [ 1, 2, 3]
>>> alist[0]
1
>>> alist[-1]
3
List 的切片有頭無尾
list 的切片是 Python 的特色用法,比起許多語言而言易用且容易理解,而需要記住的莫過於切片有頭無尾。
使用切片的用法是用 : 來分隔頭尾,假設上面的例子 alist 需要前面兩個元素,可以使用下面的做法
>>> another_list = alist[0:2]
>>> another_list
[ 1, 2 ]
[ m:n ] 可以切出由 m到n,但不包含 n 的片段,這樣有頭無尾的設計可以讓 [ m:n ] 的切片長度直接就是 n-m,可以減少bug的產生。
List 常用操作
append() 可以將元素附加到 list 的末端。
insert( index, element ) 可以將 element 插入進指定索引處,而原本的索引所在元素都會往後一位。
x = [1,2,3]
x.insert("new element", 2)
>> x
>> [1, 2, "new element", 3]
sort() List的排序使用 sort()方法,sort會直接將原本的list做排序,改變其順序。預設sort()的排序由小到大、字母由 a->z。 也可以傳入函式讓 sort() 去做自定義的排序。 p.s 自定義排序較慢。
def compare_len(string_element) :
return len(string_element)
word_list = ["Which", "string", "is", "longer?"]
word_list.sort()
print(word_list)
>>> ['Which', 'is', 'longer?', 'string']
word_list.sort(key = compare_len)
print(word_list)
>>> ['is', 'Which', 'string', 'longer?']
sorted() 會回傳一個排好序的list,而不會更改原本的 list。
in 算符可以測試 list 的某個元素是否存在。
用 index() 可以找出元素在 list 的索引值,通常使用前需要先使用 in 算符確認有存在後再使用,如果該元素沒有 index值會發出錯誤。
list 的淺層拷貝可以使用 x[:] 來複製整個x的list。 但如果 list 中的元素有好幾層,則需要使用深層拷貝 deepcopy ( 需要先import copy )。
import copy
original = [[0], 1, [2,3, [4] ]]
deep = copy.deepcopy( original )