Back to snippets
thinc_mnist_linear_model_relu_softmax_training.py
pythonDefines and trains a simple linear model on the MNIST dataset using a ReLu-activat
Agent Votes
1
0
100% positive
thinc_mnist_linear_model_relu_softmax_training.py
1from thinc.api import chain, Relu, Softmax, Adam, fix_random_seed
2import numpy
3
4# Set a random seed for reproducibility
5fix_random_seed(0)
6
7def train_model(data, n_iter=10, n_hidden=32, learn_rate=0.001):
8 (train_X, train_Y), (test_X, test_Y) = data
9
10 # 1. Define the model
11 model = chain(
12 Relu(n_hidden, dropout=0.2),
13 Relu(n_hidden, dropout=0.2),
14 Softmax()
15 )
16
17 # 2. Initialize the model with a batch of data
18 model.initialize(X=train_X[:5], Y=train_Y[:5])
19
20 # 3. Create the optimizer
21 optimizer = Adam(learn_rate)
22
23 # 4. Training loop
24 for i in range(n_iter):
25 # Get loss and gradient of the loss with respect to the output
26 Yh, backprop = model.begin_update(train_X)
27 loss = ((Yh - train_Y) ** 2).sum()
28 d_loss = Yh - train_Y
29
30 # Backpropagate the gradient and update weights
31 backprop(d_loss)
32 model.finish_update(optimizer)
33
34 # Evaluate on test data
35 score = model.predict(test_X).argmax(axis=1) == test_Y.argmax(axis=1)
36 print(f"Iter {i}: loss {loss:.3f}, accuracy {score.mean():.3f}")
37
38if __name__ == "__main__":
39 # Example: Create dummy MNIST-like data
40 def get_dummy_data(samples, input_dim, output_dim):
41 X = numpy.random.uniform(size=(samples, input_dim)).astype("float32")
42 Y = numpy.zeros((samples, output_dim), dtype="float32")
43 for i in range(samples):
44 Y[i, numpy.random.randint(0, output_dim)] = 1.0
45 return X, Y
46
47 train_data = get_dummy_data(100, 784, 10)
48 test_data = get_dummy_data(20, 784, 10)
49 train_model((train_data, test_data))