การสร้างโมเดลแบบลำดับ
ซ้อนเลเยอร์ Dense ใช้ฟังก์ชันกระตุ้น และคอมไพล์ด้วยฟังก์ชันสูญเสียกับตัวเพิ่มประสิทธิภาพ
การสร้างโมเดลแบบลำดับ เป็นบทเรียน R Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน R Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน
โมเดลแบบลำดับ
โมเดลแบบลำดับคือการเรียงชั้นต่าง ๆ ต่อกันเป็นสายเชิงเส้น โดยแต่ละชั้นมีเทนเซอร์อินพุตหนึ่งรายการและเทนเซอร์เอาต์พุตหนึ่งรายการพอดี นี่เป็นประเภทโมเดล Keras ที่ง่ายที่สุด และครอบคลุมกรณีใช้งานจริงส่วนใหญ่ ได้แก่ ตัวจำแนกแบบป้อนไปข้างหน้า โมเดลถดถอย และ CNN/RNN พื้นฐาน
library(keras)
# An empty sequential model
model <- keras_model_sequential()
print(model)
# Or specify the input shape upfront
model <- keras_model_sequential(input_shape = c(20))
print(model)layer_dense() — ชั้นเชื่อมต่อเต็มรูปแบบ
layer_dense(units, activation) เพิ่มชั้นเชื่อมต่อเต็มรูปแบบ (ชั้นหนาแน่น) ซึ่งเซลล์ประสาทอินพุตทุกตัวเชื่อมต่อกับเซลล์ประสาทเอาต์พุตทุกตัว อาร์กิวเมนต์ units กำหนดมิติของเอาต์พุต ส่วน activation ใช้ฟังก์ชันไม่เชิงเส้น โดย 'relu' เป็นตัวเลือกมาตรฐานสำหรับชั้นซ่อน
library(keras)
model <- keras_model_sequential(input_shape = c(30)) |>
layer_dense(units = 128, activation = 'relu') |>
layer_dense(units = 64, activation = 'relu') |>
layer_dense(units = 1, activation = 'sigmoid')
# Print architecture
summary(model)ฟังก์ชันกระตุ้นของชั้นเอาต์พุต
ฟังก์ชันกระตุ้นของชั้นสุดท้ายขึ้นอยู่กับงาน:
'sigmoid': การจำแนกแบบสองกลุ่ม (ส่งออกความน่าจะเป็น 0–1)'softmax': การจำแนกหลายกลุ่ม (ส่งออกความน่าจะเป็นที่รวมกันได้ 1)'linear'หรือไม่ใช้ฟังก์ชันกระตุ้น: การถดถอย (ส่งออกผลการคาดการณ์ที่เป็นค่าจริง)
# Binary classification
binary_model <- keras_model_sequential(input_shape = c(20)) |>
layer_dense(64, activation = 'relu') |>
layer_dense(1, activation = 'sigmoid') # P(class=1)
# Multi-class (10 classes)
multi_model <- keras_model_sequential(input_shape = c(20)) |>
layer_dense(64, activation = 'relu') |>
layer_dense(10, activation = 'softmax') # P per class
# Regression
reg_model <- keras_model_sequential(input_shape = c(20)) |>
layer_dense(64, activation = 'relu') |>
layer_dense(1, activation = 'linear') # raw valuecompile() — ค่าเสียหาย ตัวเพิ่มประสิทธิภาพ และตัวชี้วัด
compile(loss, optimizer, metrics) กำหนดค่ากระบวนการเรียนรู้ ชุดค่าที่ใช้บ่อยมีดังนี้:
- สองกลุ่ม:
loss = 'binary_crossentropy',metrics = 'accuracy' - หลายกลุ่ม:
loss = 'categorical_crossentropy' - การถดถอย:
loss = 'mse',metrics = 'mae'
model |> compile(
loss = 'binary_crossentropy',
optimizer = optimizer_adam(learning_rate = 0.001),
metrics = c('accuracy')
)
# Check configuration
model$loss
model$optimizer$get_config()optimizer_adam()
Adam (การประมาณโมเมนต์แบบปรับตัว) เป็นตัวเพิ่มประสิทธิภาพเริ่มต้นสำหรับงานการเรียนรู้เชิงลึกส่วนใหญ่ โดยปรับอัตราการเรียนรู้แยกตามพารามิเตอร์ด้วยค่าประมาณโมเมนต์อันดับหนึ่งและอันดับสองของเกรเดียนต์ อัตราการเรียนรู้เริ่มต้นที่ 0.001 เป็นจุดเริ่มต้นที่ดีสำหรับปัญหาส่วนใหญ่
# Adam with default settings
model |> compile(
optimizer = 'adam',
loss = 'binary_crossentropy',
metrics = 'accuracy'
)
# Customised Adam
model |> compile(
optimizer = optimizer_adam(
learning_rate = 0.0005,
beta_1 = 0.9,
beta_2 = 0.999,
epsilon = 1e-7
),
loss = 'binary_crossentropy',
metrics = 'accuracy'
)fit() — การฝึกโมเดล
fit(model, x, y, epochs, batch_size, validation_split) ใช้ฝึกโมเดล แต่ละ รอบการฝึกคือการประมวลผลข้อมูลฝึกครบหนึ่งรอบ ส่วน ขนาดกลุ่มข้อมูลกำหนดจำนวนตัวอย่างที่ประมวลผลก่อนปรับปรุงน้ำหนักแต่ละครั้ง ฟังก์ชันนี้ส่งคืนออบเจ็กต์ประวัติการฝึก
# Prepare example data
x_train <- matrix(rnorm(1000 * 20), nrow = 1000)
y_train <- sample(c(0, 1), 1000, replace = TRUE)
history <- model |> fit(
x = x_train,
y = y_train,
epochs = 20,
batch_size = 32,
validation_split = 0.2, # reserve 20% for validation
verbose = 1
)
plot(history)การทำให้ชั้นเป็นปกติ — Dropout
layer_dropout(rate) สุ่มกำหนดหน่วยอินพุตสัดส่วน rate ให้มีค่าเป็น 0 ระหว่างการฝึก วิธีนี้ป้องกันไม่ให้เซลล์ประสาทปรับตัวร่วมกันอย่างใกล้ชิดเกินไป จึงทำหน้าที่เป็นตัวทำให้เป็นปกติที่มีประสิทธิภาพ Dropout จะทำงานเฉพาะระหว่างการฝึก ไม่ทำงานระหว่างการอนุมาน
model <- keras_model_sequential(input_shape = c(784)) |>
layer_dense(512, activation = 'relu') |>
layer_dropout(rate = 0.4) |>
layer_dense(256, activation = 'relu') |>
layer_dropout(rate = 0.3) |>
layer_dense(10, activation = 'softmax')
summary(model)การทำให้การถ่วงน้ำหนักแบบ L1 และ L2 เป็นปกติ
ทำให้ชั้นแต่ละชั้นเป็นปกติโดยใช้ kernel_regularizer เพื่อปรับโทษน้ำหนักขนาดใหญ่ L2 (ridge) ปรับโทษผลรวมของกำลังสองของน้ำหนัก ส่วน L1 (lasso) ปรับโทษค่าสัมบูรณ์และทำให้เกิดความเบาบาง ทั้งสองแบบใช้งานได้ผ่าน regularizer_l2() และ regularizer_l1()
model <- keras_model_sequential(input_shape = c(100)) |>
layer_dense(
units = 64,
activation = 'relu',
kernel_regularizer = regularizer_l2(l = 0.01)
) |>
layer_dense(
units = 32,
activation = 'relu',
kernel_regularizer = regularizer_l1_l2(l1 = 1e-4, l2 = 1e-3)
) |>
layer_dense(1, activation = 'sigmoid')
summary(model)การทำให้เป็นปกติแบบกลุ่มข้อมูล
layer_batch_normalization() ทำให้ค่าการกระตุ้นจากชั้นก่อนหน้าเป็นมาตรฐานสำหรับแต่ละกลุ่มข้อมูลย่อย วิธีนี้ช่วยให้การฝึกมีเสถียรภาพ อนุญาตให้ใช้อัตราการเรียนรู้ที่สูงขึ้น และทำหน้าที่เป็นตัวทำให้เป็นปกติในระดับหนึ่ง วางฟังก์ชันนี้หลัง layer_dense() และก่อนฟังก์ชันกระตุ้น หรือวางหลังฟังก์ชันกระตุ้นก็ได้ ทั้งสองรูปแบบมีการใช้งานจริง
model <- keras_model_sequential(input_shape = c(100)) |>
layer_dense(256, use_bias = FALSE) |>
layer_batch_normalization() |>
layer_activation('relu') |>
layer_dense(128, use_bias = FALSE) |>
layer_batch_normalization() |>
layer_activation('relu') |>
layer_dense(1, activation = 'sigmoid')
summary(model)evaluate() และ predict()
evaluate(model, x_test, y_test) คำนวณค่าความสูญเสียและเมทริกซ์วัดผลจากข้อมูลทดสอบ ส่วน predict(model, x_new) สร้างผลการพยากรณ์ดิบ ซึ่งเป็นค่าความน่าจะเป็นสำหรับการจำแนกประเภท ทั้งสองฟังก์ชันรับเมทริกซ์ตัวเลขและคืนค่าในรูปแบบที่สอดคล้องกับค่าของ R
x_test <- matrix(rnorm(200 * 20), nrow = 200)
y_test <- sample(c(0, 1), 200, replace = TRUE)
# Evaluate on test set
test_metrics <- model |> evaluate(x_test, y_test, verbose = 0)
cat('Test Loss:', test_metrics['loss'])
cat('Test Accuracy:', test_metrics['accuracy'])
# Generate predictions
prob_preds <- model |> predict(x_test)
class_preds <- ifelse(prob_preds > 0.5, 1, 0)
table(class_preds, y_test)การบันทึกและโหลดโมเดล
บันทึกโมเดลที่คอมไพล์และฝึกแล้วด้วย save_model_tf(model, 'path') (รูปแบบ TF SavedModel ซึ่งแนะนำให้ใช้) หรือ save_model_hdf5(model, 'model.h5') โหลดโมเดลกลับด้วย load_model_tf() หรือ load_model_hdf5() โมเดลที่โหลดกลับมาจะยังคงการตั้งค่าการคอมไพล์ไว้ และสามารถใช้พยากรณ์หรือฝึกต่อได้ทันที
# Save in TensorFlow SavedModel format (recommended)
save_model_tf(model, '/tmp/my_dense_model')
# Reload
loaded <- load_model_tf('/tmp/my_dense_model')
# Confirm predictions match
new_preds <- loaded |> predict(x_test)
all.equal(prob_preds, new_preds) # TRUEตรวจสอบความเข้าใจอย่างรวดเร็ว
เมื่อสร้างโมเดลแบบลำดับสำหรับปัญหาการจำแนกประเภท 5 กลุ่ม เลเยอร์เอาต์พุตควรใช้ฟังก์ชันการกระตุ้นใด และควรมีจำนวนหน่วยเท่าใด
ทบทวนโมเดลแบบลำดับ
ประเด็นสำคัญจากบทการสร้างโมเดลแบบลำดับ:
keras_model_sequential()สร้างการเรียงซ้อนของเลเยอร์แบบเส้นตรงlayer_dense(units, activation)คือเลเยอร์เชื่อมต่อเต็มรูปแบบหลัก- การกระตุ้นเอาต์พุต:
'sigmoid'(สองกลุ่ม),'softmax'(หลายกลุ่ม),'linear'(การถดถอย) compile(loss, optimizer, metrics)กำหนดค่ากระบวนการเรียนรู้fit(model, x, y, epochs, batch_size, validation_split)ใช้ฝึกโมเดล- การทำให้เป็นปกติ:
layer_dropout(rate),regularizer_l2(),layer_batch_normalization() - บันทึกด้วย
save_model_tf()และโหลดด้วยload_model_tf()
library(keras)
model <- keras_model_sequential(input_shape = c(30)) |>
layer_dense(128, activation = 'relu') |>
layer_dropout(0.4) |>
layer_dense(64, activation = 'relu') |>
layer_dropout(0.3) |>
layer_dense(1, activation = 'sigmoid')
model |> compile(
optimizer = optimizer_adam(0.001),
loss = 'binary_crossentropy',
metrics = 'accuracy'
)
history <- model |> fit(
x_train, y_train,
epochs = 30, batch_size = 64,
validation_split = 0.2, verbose = 0
)
plot(history)คำถามที่พบบ่อย
บทเรียน “การสร้างโมเดลแบบลำดับ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การสร้างโมเดลแบบลำดับ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส R Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การสร้างโมเดลแบบลำดับ”
ซ้อนเลเยอร์ Dense ใช้ฟังก์ชันกระตุ้น และคอมไพล์ด้วยฟังก์ชันสูญเสียกับตัวเพิ่มประสิทธิภาพ คุณปฏิบัติ R Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน R Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน R Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การสร้างโมเดลแบบลำดับ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน R Academy นี้ได้ไหม
ได้ บทเรียน R Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตั้งค่า Keras และ TensorFlow ใน R
- การสร้างโมเดลแบบลำดับ
- พื้นฐานโครงข่ายประสาทเทียมแบบคอนโวลูชัน
- การฝึก การตรวจสอบ และการป้องกันการเรียนรู้เกิน