CNTK - ฝึกอบรม Neural Network
เราจะทำความเข้าใจเกี่ยวกับการฝึก Neural Network ใน CNTK
ฝึกอบรมนางแบบใน CNTK
ในส่วนก่อนหน้านี้เราได้กำหนดองค์ประกอบทั้งหมดสำหรับโมเดลการเรียนรู้เชิงลึก ตอนนี้มันเป็นเวลาที่จะฝึกมัน ดังที่เราได้กล่าวไว้ก่อนหน้านี้เราสามารถฝึกโมเดล NN ใน CNTK โดยใช้การรวมกันของlearner และ trainer.
การเลือกผู้เรียนและการตั้งค่าการฝึกอบรม
ในส่วนนี้เราจะกำหนดไฟล์ learner. CNTK ให้หลาย ๆlearnersให้เลือก สำหรับโมเดลของเราซึ่งกำหนดไว้ในส่วนก่อนหน้านี้เราจะใช้Stochastic Gradient Descent (SGD) learner.
ในการฝึกอบรมเครือข่ายประสาทให้เรากำหนดค่า learner และ trainer ด้วยความช่วยเหลือของขั้นตอนต่อไปนี้ -
Step 1 - ก่อนอื่นเราต้องนำเข้า sgd ฟังก์ชันจาก cntk.lerners แพ็คเกจ
from cntk.learners import sgd
Step 2 - ต่อไปเราต้องนำเข้า Trainer ฟังก์ชันจาก cntk.trainแพ็คเกจ. trainer
from cntk.train.trainer import Trainer
Step 3 - ตอนนี้เราต้องสร้างไฟล์ learner. สามารถสร้างได้โดยการเรียกใช้sgd ฟังก์ชั่นพร้อมกับการระบุพารามิเตอร์ของโมเดลและค่าสำหรับอัตราการเรียนรู้
learner = sgd(z.parametrs, 0.01)
Step 4 - ในที่สุดเราต้องเริ่มต้นไฟล์ trainer. จะต้องจัดเตรียมเครือข่ายการรวมกันของloss และ metric พร้อมกับ learner.
trainer = Trainer(z, (loss, error_rate), [learner])
อัตราการเรียนรู้ที่ควบคุมความเร็วของการปรับให้เหมาะสมควรมีค่าน้อยระหว่าง 0.1 ถึง 0.001
การเลือกผู้เรียนและการตั้งค่าการฝึกอบรม - ตัวอย่างที่สมบูรณ์
from cntk.learners import sgd
from cntk.train.trainer import Trainer
learner = sgd(z.parametrs, 0.01)
trainer = Trainer(z, (loss, error_rate), [learner])
ป้อนข้อมูลลงในเทรนเนอร์
เมื่อเราเลือกและกำหนดค่าเทรนเนอร์แล้วก็ถึงเวลาโหลดชุดข้อมูล เราได้บันทึกไฟล์iris ชุดข้อมูลเป็น.CSV และเราจะใช้แพ็คเกจการโต้เถียงข้อมูลชื่อ pandas เพื่อโหลดชุดข้อมูล
ขั้นตอนในการโหลดชุดข้อมูลจากไฟล์. CSV
Step 1 - ขั้นแรกเราต้องนำเข้าไฟล์ pandas แพ็คเกจ
from import pandas as pd
Step 2 - ตอนนี้เราต้องเรียกใช้ฟังก์ชันที่ชื่อ read_csv เพื่อโหลดไฟล์. csv จากดิสก์
df_source = pd.read_csv(‘iris.csv’, names = [‘sepal_length’, ‘sepal_width’,
‘petal_length’, ‘petal_width’, index_col=False)
เมื่อเราโหลดชุดข้อมูลแล้วเราจำเป็นต้องแยกออกเป็นชุดของคุณลักษณะและป้ายกำกับ
ขั้นตอนในการแยกชุดข้อมูลออกเป็นฟีเจอร์และป้ายกำกับ
Step 1- ขั้นแรกเราต้องเลือกแถวทั้งหมดและสี่คอลัมน์แรกจากชุดข้อมูล สามารถทำได้โดยใช้iloc ฟังก์ชัน
x = df_source.iloc[:, :4].values
Step 2- ต่อไปเราต้องเลือกคอลัมน์สายพันธุ์จากชุดข้อมูลไอริส เราจะใช้คุณสมบัติค่าในการเข้าถึงพื้นฐานnumpy อาร์เรย์
x = df_source[‘species’].values
ขั้นตอนในการเข้ารหัสคอลัมน์สายพันธุ์เป็นการแสดงเวกเตอร์ที่เป็นตัวเลข
ดังที่เราได้กล่าวไปก่อนหน้านี้โมเดลของเราขึ้นอยู่กับการจัดหมวดหมู่ซึ่งต้องใช้ค่าอินพุตที่เป็นตัวเลข ดังนั้นในที่นี้เราจำเป็นต้องเข้ารหัสคอลัมน์สปีชีส์เป็นการแสดงเวกเตอร์ที่เป็นตัวเลข มาดูขั้นตอนกันเลย -
Step 1- ขั้นแรกเราต้องสร้างนิพจน์รายการเพื่อวนซ้ำองค์ประกอบทั้งหมดในอาร์เรย์ จากนั้นทำการค้นหาในพจนานุกรม label_mapping สำหรับแต่ละค่า
label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}
Step 2- จากนั้นแปลงค่าตัวเลขที่แปลงแล้วนี้เป็นเวกเตอร์ที่เข้ารหัสแบบร้อนแรง เราจะใช้one_hot ฟังก์ชันดังต่อไปนี้ -
def one_hot(index, length):
result = np.zeros(length)
result[index] = 1
return result
Step 3 - ในที่สุดเราต้องเปลี่ยนรายการที่แปลงแล้วนี้เป็นไฟล์ numpy อาร์เรย์
y = np.array([one_hot(label_mapping[v], 3) for v in y])
ขั้นตอนในการตรวจจับการติดตั้งมากเกินไป
สถานการณ์เมื่อโมเดลของคุณจำตัวอย่างได้ แต่ไม่สามารถสรุปกฎจากตัวอย่างการฝึกอบรมได้ ด้วยความช่วยเหลือของขั้นตอนต่อไปนี้เราสามารถตรวจจับการติดตั้งมากเกินไปในแบบจำลองของเรา -
Step 1 - อันดับแรกจาก sklearn นำเข้าไฟล์ train_test_split ฟังก์ชั่นจาก model_selection โมดูล.
from sklearn.model_selection import train_test_split
Step 2 - ต่อไปเราต้องเรียกใช้ฟังก์ชัน train_test_split ด้วยคุณสมบัติ x และป้ายกำกับ y ดังนี้ -
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0-2,
stratify=y)
เราระบุขนาดการทดสอบ 0.2 เพื่อกันไว้ 20% ของข้อมูลทั้งหมด
label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}
ขั้นตอนในการป้อนชุดการฝึกอบรมและการตรวจสอบความถูกต้องให้กับโมเดลของเรา
Step 1 - ในการฝึกโมเดลของเราก่อนอื่นเราจะเรียกใช้ไฟล์ train_minibatchวิธี. จากนั้นให้พจนานุกรมที่จับคู่ข้อมูลอินพุตกับตัวแปรอินพุตที่เราใช้เพื่อกำหนด NN และฟังก์ชันการสูญเสียที่เกี่ยวข้อง
trainer.train_minibatch({ features: X_train, label: y_train})
Step 2 - ต่อไปโทร train_minibatch โดยใช้สิ่งต่อไปนี้สำหรับลูป -
for _epoch in range(10):
trainer.train_minbatch ({ feature: X_train, label: y_train})
print(‘Loss: {}, Acc: {}’.format(
trainer.previous_minibatch_loss_average,
trainer.previous_minibatch_evaluation_average))
ป้อนข้อมูลลงในเทรนเนอร์ - ตัวอย่างที่สมบูรณ์
from import pandas as pd
df_source = pd.read_csv(‘iris.csv’, names = [‘sepal_length’, ‘sepal_width’, ‘petal_length’, ‘petal_width’, index_col=False)
x = df_source.iloc[:, :4].values
x = df_source[‘species’].values
label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}
def one_hot(index, length):
result = np.zeros(length)
result[index] = 1
return result
y = np.array([one_hot(label_mapping[v], 3) for v in y])
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, stratify=y)
label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}
trainer.train_minibatch({ features: X_train, label: y_train})
for _epoch in range(10):
trainer.train_minbatch ({ feature: X_train, label: y_train})
print(‘Loss: {}, Acc: {}’.format(
trainer.previous_minibatch_loss_average,
trainer.previous_minibatch_evaluation_average))
การวัดประสิทธิภาพของ NN
เพื่อเพิ่มประสิทธิภาพโมเดล NN ของเราเมื่อใดก็ตามที่เราส่งข้อมูลผ่านเทรนเนอร์มันจะวัดประสิทธิภาพของโมเดลผ่านเมตริกที่เรากำหนดค่าสำหรับเทรนเนอร์ การวัดประสิทธิภาพของแบบจำลอง NN ในระหว่างการฝึกอบรมอยู่บนข้อมูลการฝึกอบรม แต่ในทางกลับกันสำหรับการวิเคราะห์ประสิทธิภาพแบบจำลองทั้งหมดเราจำเป็นต้องใช้ข้อมูลการทดสอบด้วยเช่นกัน
ดังนั้นในการวัดประสิทธิภาพของโมเดลโดยใช้ข้อมูลการทดสอบเราสามารถเรียกใช้ไฟล์ test_minibatch วิธีการบน trainer ดังต่อไปนี้ -
trainer.test_minibatch({ features: X_test, label: y_test})
การทำนายด้วย NN
เมื่อคุณฝึกโมเดลการเรียนรู้เชิงลึกแล้วสิ่งที่สำคัญที่สุดคือการคาดเดาโดยใช้สิ่งนั้น ในการทำนายจาก NN ที่ได้รับการฝึกฝนข้างต้นเราสามารถทำตามขั้นตอนที่กำหนด given
Step 1 - ก่อนอื่นเราต้องเลือกสุ่มไอเทมจากชุดทดสอบโดยใช้ฟังก์ชันต่อไปนี้ -
np.random.choice
Step 2 - ต่อไปเราต้องเลือกข้อมูลตัวอย่างจากชุดทดสอบโดยใช้ sample_index.
Step 3 - ตอนนี้ในการแปลงเอาต์พุตตัวเลขเป็น NN เป็นฉลากจริงให้สร้างการแมปแบบกลับด้าน
Step 4 - ตอนนี้ใช้สิ่งที่เลือก sampleข้อมูล. ทำการทำนายโดยเรียกใช้ NN z เป็นฟังก์ชัน
Step 5- ตอนนี้เมื่อคุณได้ผลลัพธ์ที่ทำนายแล้วให้นำดัชนีของเซลล์ประสาทที่มีค่าสูงสุดเป็นค่าที่คาดการณ์ไว้ สามารถทำได้โดยใช้ไฟล์np.argmax ฟังก์ชั่นจาก numpy แพ็คเกจ
Step 6 - ในที่สุดให้แปลงค่าดัชนีเป็นฉลากจริงโดยใช้ inverted_mapping.
การทำนายด้วย NN - ตัวอย่างที่สมบูรณ์
sample_index = np.random.choice(X_test.shape[0])
sample = X_test[sample_index]
inverted_mapping = {
1:’Iris-setosa’,
2:’Iris-versicolor’,
3:’Iris-virginica’
}
prediction = z(sample)
predicted_label = inverted_mapping[np.argmax(prediction)]
print(predicted_label)
เอาต์พุต
หลังจากฝึกรูปแบบการเรียนรู้เชิงลึกข้างต้นและเรียกใช้แล้วคุณจะได้ผลลัพธ์ดังต่อไปนี้ -
Iris-versicolor