Source code for models.KANSINupm_v1

from . import KAN, ChebyLayer_v2, TaylorLayer
import os, torch, torch.nn as nn
[docs] class KANSIN(KAN): def __init__( self, nneuron_sin:int, sigma:float = 1.0, *args, **kwargs ): super().__init__(*args, **kwargs) self.nneuron_sin = nneuron_sin self.sigma = sigma self.input = SineLayer(self.ninput, self.nneuron_sin, self.sigma) self.kan_layers[0] = self.layer_type(self.nneuron_sin, self.hidden_neur, self.degree) self.to(self.device) if self.intro: print('Adding sin layer at the beginning:') keys_print = ['nneuron_sin', 'sigma'] for key in keys_print: print(f" {key}: {getattr(self, key)}")
[docs] def define_checkpoint(self): checkpoint = super().define_checkpoint() checkpoint["sigma"] = self.sigma checkpoint["nneuron_sin"] = self.nneuron_sin checkpoint["state_dict"] = self.state_dict() return checkpoint
[docs] class SineLayer(nn.Module): def __init__(self, input_size, output_size, sigma=1.0): super(SineLayer, self).__init__() self.linear = nn.Linear(input_size, output_size) self.sigma = sigma self.init_weights()
[docs] def init_weights(self): nn.init.normal_(self.linear.weight, mean=0.0, std=self.sigma) nn.init.zeros_(self.linear.bias)
[docs] def forward(self, x): return torch.sin( self.linear(x))