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