ดูบน TensorFlow.org | ทำงานใน Google Colab | ดูแหล่งที่มาบน GitHub | ดาวน์โหลดโน๊ตบุ๊ค |
บทนำสั้นๆ นี้ใช้ Keras เพื่อ:
- โหลดชุดข้อมูลที่สร้างไว้ล่วงหน้า
- สร้างโมเดลแมชชีนเลิร์นนิงเครือข่ายประสาทที่จำแนกรูปภาพ
- ฝึกโครงข่ายประสาทเทียมนี้
- ประเมินความถูกต้องของแบบจำลอง
บทแนะนำนี้เป็นสมุดบันทึก Google Colaboratory โปรแกรม Python ทำงานโดยตรงในเบราว์เซอร์ ซึ่งเป็นวิธีที่ยอดเยี่ยมในการเรียนรู้และใช้งาน TensorFlow หากต้องการทำตามบทแนะนำนี้ ให้เรียกใช้สมุดบันทึกใน Google Colab โดยคลิกปุ่มที่ด้านบนของหน้านี้
- ใน Colab ให้เชื่อมต่อกับรันไทม์ของ Python: ที่ด้านบนขวาของแถบเมนู ให้เลือก CONNECT
- เรียกใช้เซลล์โค้ดของสมุดบันทึกทั้งหมด: เลือก รันไทม์ > เรียกใช้ทั้งหมด
ตั้งค่า TensorFlow
นำเข้า TensorFlow ลงในโปรแกรมของคุณเพื่อเริ่มต้น:
import tensorflow as tf
print("TensorFlow version:", tf.__version__)
TensorFlow version: 2.8.0-rc1
หากคุณกำลังติดตามในสภาพแวดล้อมการพัฒนาของคุณเอง แทนที่จะเป็น Colab โปรดดู คู่มือการติดตั้ง สำหรับการตั้งค่า TensorFlow สำหรับการพัฒนา
โหลดชุดข้อมูล
โหลดและเตรียม ชุดข้อมูล MNIST แปลงข้อมูลตัวอย่างจากจำนวนเต็มเป็นเลขทศนิยม:
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
สร้างโมเดลแมชชีนเลิร์นนิง
สร้างโมเดล tf.keras.Sequential
โดยการซ้อนเลเยอร์
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10)
])
สำหรับแต่ละตัวอย่าง โมเดลจะส่งกลับเวกเตอร์ของ คะแนน logits หรือ log-odds หนึ่งรายการสำหรับแต่ละชั้นเรียน
predictions = model(x_train[:1]).numpy()
predictions
array([[ 0.2760778 , -0.39324787, -0.17098302, 1.2016621 , -0.03416392, 0.5461229 , -0.7203061 , -0.41886678, -0.59480035, -0.7580608 ]], dtype=float32)
ฟังก์ชัน tf.nn.softmax
แปลงบันทึกเหล่านี้เป็น ความน่าจะ เป็นสำหรับแต่ละคลาส:
tf.nn.softmax(predictions).numpy()
array([[0.11960829, 0.06124588, 0.0764901 , 0.30181262, 0.08770514, 0.15668967, 0.04416083, 0.05969675, 0.05006609, 0.04252464]], dtype=float32)
กำหนดฟังก์ชันการสูญเสียสำหรับการฝึกโดยใช้ความสูญเสีย losses.SparseCategoricalCrossentropy
ซึ่งรับเวกเตอร์ของ logits และดัชนี True
และคืนค่าการสูญเสียสเกลาร์สำหรับแต่ละตัวอย่าง
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
การสูญเสียนี้เท่ากับความน่าจะเป็นของบันทึกเชิงลบของคลาสจริง: การสูญเสียจะเป็นศูนย์หากโมเดลแน่ใจในคลาสที่ถูกต้อง
โมเดลที่ไม่ได้รับการฝึกฝนนี้ให้ความน่าจะเป็นใกล้เคียงกับการสุ่ม (1/10 สำหรับแต่ละคลาส) ดังนั้นการสูญเสียเริ่มต้นควรใกล้เคียงกับ -tf.math.log(1/10) ~= 2.3
loss_fn(y_train[:1], predictions).numpy()
1.8534881
ก่อนที่คุณจะเริ่มการฝึก ให้กำหนดค่าและคอมไพล์โมเดลโดยใช้ Keras Model.compile
ตั้งค่าคลาสตัว optimizer
เป็น adam
ตั้งค่าการ loss
เป็นฟังก์ชัน loss_fn
ที่คุณกำหนดไว้ก่อนหน้านี้ และระบุตัววัดที่จะประเมินสำหรับโมเดลโดยการตั้งค่าพารามิเตอร์ metrics
เป็น accuracy
model.compile(optimizer='adam',
loss=loss_fn,
metrics=['accuracy'])
ฝึกและประเมินแบบจำลองของคุณ
ใช้วิธี Model.fit
เพื่อปรับพารามิเตอร์โมเดลของคุณและลดการสูญเสียให้เหลือน้อยที่สุด:
model.fit(x_train, y_train, epochs=5)
Epoch 1/5 1875/1875 [==============================] - 4s 2ms/step - loss: 0.2950 - accuracy: 0.9143 Epoch 2/5 1875/1875 [==============================] - 3s 2ms/step - loss: 0.1451 - accuracy: 0.9567 Epoch 3/5 1875/1875 [==============================] - 4s 2ms/step - loss: 0.1080 - accuracy: 0.9668 Epoch 4/5 1875/1875 [==============================] - 4s 2ms/step - loss: 0.0906 - accuracy: 0.9717 Epoch 5/5 1875/1875 [==============================] - 4s 2ms/step - loss: 0.0749 - accuracy: 0.9761 <keras.callbacks.History at 0x7f062c606850>
วิธีการ Model.evaluate
จะตรวจสอบประสิทธิภาพของโมเดล โดยปกติจะอยู่ใน " ชุดตรวจสอบความถูกต้อง " หรือ " ชุดทดสอบ "
model.evaluate(x_test, y_test, verbose=2)
313/313 - 1s - loss: 0.0783 - accuracy: 0.9755 - 588ms/epoch - 2ms/step [0.07825208455324173, 0.9754999876022339]
ตัวแยกประเภทรูปภาพได้รับการฝึกฝนให้มีความแม่นยำประมาณ 98% ในชุดข้อมูลนี้ หากต้องการเรียนรู้เพิ่มเติม โปรดอ่าน บทแนะนำ TensorFlow
หากคุณต้องการให้แบบจำลองของคุณคืนค่าความน่าจะเป็น คุณสามารถรวมโมเดลที่ฝึกแล้วแนบ softmax ลงไปได้:
probability_model = tf.keras.Sequential([
model,
tf.keras.layers.Softmax()
])
probability_model(x_test[:5])
<tf.Tensor: shape=(5, 10), dtype=float32, numpy= array([[2.72807270e-08, 2.42517650e-08, 7.75602894e-06, 1.28684027e-04, 7.66215633e-11, 3.54162950e-07, 3.04894151e-14, 9.99857187e-01, 2.32766553e-08, 5.97762892e-06], [7.37396704e-08, 4.73638036e-04, 9.99523997e-01, 7.20633352e-07, 4.54133671e-17, 1.42298268e-06, 5.96959016e-09, 1.23534145e-13, 7.77225608e-08, 6.98619169e-16], [1.95462448e-07, 9.99295831e-01, 1.02249986e-04, 1.86699708e-05, 5.65737491e-06, 1.12115902e-06, 5.32719559e-06, 5.22767776e-04, 4.79981136e-05, 1.76624681e-07], [9.99649286e-01, 1.80224735e-09, 3.73612856e-05, 1.52324446e-07, 1.30824594e-06, 2.82781020e-05, 6.99703523e-05, 3.30940424e-07, 2.13184350e-07, 2.13106396e-04], [1.53770895e-06, 1.72272063e-08, 1.98980865e-06, 3.97882580e-08, 9.97192323e-01, 1.10544443e-05, 1.54713348e-06, 2.81727880e-05, 3.48721733e-06, 2.75991508e-03]], dtype=float32)>
บทสรุป
ยินดีด้วย! คุณได้ฝึกโมเดลการเรียนรู้ของเครื่องโดยใช้ชุดข้อมูลที่สร้างไว้ล่วงหน้าโดยใช้ Keras API
สำหรับตัวอย่างเพิ่มเติมของการใช้ Keras โปรดดูบทช่วย สอน หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการสร้างแบบจำลองด้วย Keras โปรดอ่าน คู่มือ หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการโหลดและเตรียมข้อมูล โปรดดูบทแนะนำเกี่ยวกับ การโหลดข้อมูลรูปภาพ หรือการโหลด ข้อมูล CSV