मैं एक seq2seq भविष्यवाणी करने की कोशिश कर रहा हूँ। इसके लिए, मेरे पास एक LSTM परत है जिसके बाद पूरी तरह से जुड़ी हुई परत है। मैं प्रशिक्षण चरण के दौरान शिक्षक प्रशिक्षण को नियोजित करता हूं और परीक्षण चरण के दौरान इसे (मैं शायद यहां गलत हूं) छोड़ना चाहता हूं। मुझे ऐसा करने का कोई सीधा तरीका नहीं मिला है इसलिए मैंने नीचे दिखाया गया तरीका अपनाया है।

def forward(self, inputs, future=0, teacher_force_ratio=0.2, target=None):
    outputs = []
    for idx in range(future):
        rnn_out, _ = self.rnn(inputs)
        output = self.fc1(rnn_out)
        if self.teacher_training:
            new_input = output if np.random.random() >= teacher_force_ratio else target[idx]
        else:
            new_input = output
        inputs = new_input

मैं एक bool चर teacher_training का उपयोग यह जांचने के लिए करता हूं कि शिक्षक प्रशिक्षण की आवश्यकता है या नहीं। क्या यह सही है? यदि हां, तो क्या ऐसा करने का कोई बेहतर तरीका है? धन्यवाद।

2
learner 5 नवम्बर 2020, 21:33

1 उत्तर

सबसे बढ़िया उत्तर

PyTorch में nn.Module का विस्तार करने वाले सभी वर्गों में एक kwarg बूलियन परम होता है जिसे training कहा जाता है। इसलिए teacher_training के बजाय हमें केवल training परम का उपयोग करना चाहिए। यह पैरामीटर आपके मॉडल प्रशिक्षण मोड (model.train() और model.eval()) के आधार पर स्वचालित रूप से सेट हो जाता है।

2
Dharman 6 नवम्बर 2020, 06:22