code: def __init__(self, in_features, out_features, bias=True):
      # TODO: is this init good? torch inits to uniform(-1/sqrt(in_features), 1/sqrt(in_features))
      self.weight = Tensor.kaiming_uniform(
          out_features, in_features, a=math.sqrt(5)
      )
      bound = 1 / math.sqrt(in_features)
      self.bias = (
          Tensor.uniform(out_features, low=-bound, high=bound)
          if bias
          else None
      )
  
imports: import math
  from typing import Optional, Union, Tuple, cast
  from tinygrad.tensor import Tensor
  from tinygrad.helpers import prod
  from tinygrad.nn import optim, state
label_desc: Use image node_id 1 to create a new Linear object  with example: obj = Linear(in_features, out_features, bias)