समस्या
जब कोई न्यूरॉन अपने वेट वाले इनपुट जोड़ लेता है, तब एक्टिवेशन फ़ंक्शन उसका आउटपुट तय करता है। इसके बिना न्यूरल नेटवर्क केवल सीधी रेखाएँ ही सीख पाता।
activate(name, values) लागू करें और दिए गए नाम वाला फ़ंक्शन हर मान पर लगाएँ:
| name | सूत्र |
|---|---|
"sigmoid" | 1 / (1 + e^(-x)) |
"relu" | max(0, x) |
"leaky_relu" | अगर x > 0 तो x, नहीं तो 0.01 × x |
"tanh" | (e^x - e^(-x)) / (e^x + e^(-x)) |
इनपुट
name: "sigmoid", "relu", "leaky_relu" या "tanh" में से एक।
values: संख्याओं की एक सूची।
आउटपुट
हर मान पर एक्टिवेशन लगाकर बनी सूची उसी क्रम में लौटाएँ।
सीमाएँ
1 ≤ values की लंबाई ≤ 1,000
-50 ≤ हर मान ≤ 50
उदाहरण
इनपुट:
name = "sigmoid"
values = [0.0, 2.0, -2.0]
अपेक्षित आउटपुट:
expected = [0.5, 0.880797, 0.119203]
इनपुट:
std::string name = "sigmoid";
std::vector<double> values = {0.0, 2.0, -2.0};
अपेक्षित आउटपुट:
std::vector<double> expected = {0.5, 0.880797, 0.119203};
इनपुट:
string name = "sigmoid";
double[] values = new double[] {0.0, 2.0, -2.0};
अपेक्षित आउटपुट:
double[] expected = new double[] {0.5, 0.880797, 0.119203};
व्याख्या
sigmoid(0) = 1 / (1 + 1) = 0.5, sigmoid(2) ≈ 0.880797 और sigmoid(-2) ≈ 0.119203। sigmoid किसी भी संख्या को 0 से 1 की सीमा में ले आता है।
इनपुट:
name = "relu"
values = [-1.5, 0.0, 3.0]
अपेक्षित आउटपुट:
expected = [0.0, 0.0, 3.0]
इनपुट:
std::string name = "relu";
std::vector<double> values = {-1.5, 0.0, 3.0};
अपेक्षित आउटपुट:
std::vector<double> expected = {0.0, 0.0, 3.0};
इनपुट:
string name = "relu";
double[] values = new double[] {-1.5, 0.0, 3.0};
अपेक्षित आउटपुट:
double[] expected = new double[] {0.0, 0.0, 3.0};
व्याख्या
ReLU धनात्मक मानों को वैसा ही रखता है और ऋणात्मक मानों को 0 बना देता है: [0, 0, 3]।
संदर्भ
यह चुनौती CodeUtility के लिए अनुकूलित की गई है। ऊपर दिए गए स्टेटमेंट और सीमाओं का पालन करें।