Practice
import numpy as np
class DropoutLayer:
def __init__(self, dropout_rate):
self.dropout_rate = dropout_rate
def forward(self, inputs, training=True):
if training:
self.mask = np.random.binomial(1, 1 - self.dropout_rate, size=inputs.shape)
return inputs * self.mask
else:
return inputs
inputs = np.array([1.0, 2.0, 3.0])
dropout_layer = DropoutLayer(0.5)
output = dropout_layer.forward(inputs, training=False)
print(output)Solution
Step 1: Understand Inference Mode
During inference, dropout is not applied, so the input is returned unchanged.Step 2: Eliminate Wrong Options
[0.5, 1.0, 1.5] applies scaling, which is incorrect for inference. [0.0, 0.0, 0.0] assumes all zeros, which is not the case. [2.0, 4.0, 6.0] doubles the input, which is incorrect.Final Answer:
Option B -> Option BQuick Check:
Inference mode returns inputs unchanged. [OK]
Solution
Step 1: Analyze Dropout Operation
Applying dropout involves generating a mask and element-wise multiplication, both O(n) operations.Step 2: Eliminate Wrong Options
O(1) suggests constant time, which is incorrect. O(n^2) suggests quadratic time, which is excessive. O(log n) suggests logarithmic time, which is not applicable.Final Answer:
Option D -> Option DQuick Check:
Dropout involves element-wise operations. [OK]
Solution
Step 1: Understand multi-class needs
Each class needs its own row and column in the matrix.Step 2: Choose correct matrix size
A (n_classes, n_classes) matrix captures all class interactions.Final Answer:
Option D -> Option DQuick Check:
Multi-class needs (n_classes, n_classes) matrix. [OK]
Solution
Step 1: Identify the challenge with sparse data
Sparse data often leads to many zero gradients, making full updates inefficient.Step 2: Choose the appropriate modification
Lazy updates only update non-zero elements, reducing unnecessary computations and improving efficiency.Final Answer:
Option D -> Option DQuick Check:
Use lazy updates for sparse data efficiency [OK]
def non_max_suppression(boxes, scores, iou_threshold):
indices = np.argsort(scores)[::-1]
keep = []
while len(indices) > 0:
current = indices[0]
keep.append(current)
indices = indices[1:]
indices = [i for i in indices if iou(boxes[current], boxes[i]) < iou_threshold]
return keepSolution
Step 1: Identify bottleneck
IoU calculations are the most computationally expensive part.Step 2: Optimize bottleneck
Parallelizing IoU calculations can significantly reduce runtime for large datasets.Final Answer:
Option A -> Option AQuick Check:
Parallelize expensive operations [OK]
