A simple linear temperature classifier that determines whether it is negative or positive.

0 - negative temperature

1 - positive temperature

Model architecture

import torch
import torch.nn as nn

class TemperatureClassifier(nn.Module):
    def __init__(self, inp_dim, hidden_dim, out_dim):
        super().__init__()
        self.ln_1 = nn.Linear(inp_dim, hidden_dim)
        self.ln_out = nn.Linear(hidden_dim, out_dim)
        self.gelu = nn.GELU()

    def forward(self, x):
        out1 = self.gelu(self.ln_1(x))
        out2 = self.ln_out(out1)

        return out2

Model train example

import torch
import torch.nn as nn
from model import TemperatureClassifier
from safetensors.torch import save_file
    
def split_data(dictionary):
    x  = []
    y = []

    x = list(dictionary.keys())
    y = list(dictionary.values())

    return x, y

def load_tensor(x, y, device):
    x_tensor = torch.tensor(x, dtype=torch.float32).unsqueeze(1).to(device)
    y_tensor = torch.tensor(y, dtype=torch.int64).to(device)

    return x_tensor, y_tensor

def validation(model, x_val_ten, y_val_ten):
    loss_fn = nn.CrossEntropyLoss()
    model.eval()
    count = 0
    avg_val_loss = 0

    with torch.no_grad():
        for i in range(len(x_val_ten)):
            x_sm = x_val_ten[i].unsqueeze(0)
            y_sm = y_val_ten[i].unsqueeze(0)
            out = model(x_sm)
            loss = loss_fn(out, y_sm)
            avg_val_loss += loss.item()
            count += 1

    avg_val_loss = avg_val_loss / count
    print(f'Avg val loss: {avg_val_loss}')


def learning(model, x_train_ten, y_train_ten, x_test_ten, y_test_ten, x_val_ten, y_val_ten, epoch=8):
    optimizer = torch.optim.AdamW(model.parameters(), lr=1e-3, weight_decay=1e-3)
    loss_fn = nn.CrossEntropyLoss()
   
    count = 0
    avg_train_loss = 0
    avg_test_loss = 0

    for i in range(epoch):
        model.train()
        print(f'Эпоха: {i}')
        optimizer.zero_grad()
        for j in range(len(x_train_ten)):
            x_sample = x_train_ten[j].unsqueeze(0)
            y_sample = y_train_ten[j].unsqueeze(0)

            out = model(x_sample)
            loss = loss_fn(out, y_sample)
            avg_train_loss += loss.item()
            count += 1
            loss.backward()
            optimizer.step()
            optimizer.zero_grad()
        
        avg_train_loss = avg_train_loss / count
        count = 0
        print(f'Avg train loss: {avg_train_loss}')
        avg_train_loss = 0
        
        model.eval()
        avg_test_loss = 0
        with torch.no_grad():
            for j in range(len(x_test_ten)):
                x_sm = x_test_ten[j].unsqueeze(0)
                y_sm = y_test_ten[j].unsqueeze(0)
                out = model(x_sm)
                loss = loss_fn(out, y_sm)
                avg_test_loss += loss.item()
                count += 1
        
        avg_test_loss = avg_test_loss / count
        print(f'Avg test loss: {avg_test_loss}')
        count = 0
        avg_train_loss = 0
        avg_test_loss = 0

    
    validation(model, x_val_ten, y_val_ten)

    save_file(model.state_dict(), 'temperature_classifier.safetensors')
    print('Model temperature_classifier.safetensors saved')

train_data = {
    # ===== Class 0: Negative numbers =====
    -1: 0, -5: 0, -10: 0, -0.5: 0, -12.5: 0, -30.5: 0,
    -15.2: 0, -11: 0, -0.05: 0, -0.15: 0, -100: 0,
    -35: 0, -0.02: 0, -0.01: 0, -34.4: 0, -44.5: 0,
    -1000: 0, -1110: 0, -5.5: 0, -4.5: 0, -11.4: 0,
    -345: 0, -222: 0, -145: 0, -289678: 0, -93949585: 0,
    -3456666: 0, -0.0045: 0, -0.99: 0, -0.0000000006: 0, -0.00000003: 0, -0.000034:0,  -0.0000000455: 0, -0.0000005666: 0, -0.0000056054: 0, -0.00000455: 0, -0.0000045: 0, -0.00000000432:0, -0.007: 0, -0.0000056: 0, -0.00000644: 0, -0.0000005444: 0,
    # ===== Class 1: Positive numbers =====
    123: 1, 23.4: 1, 56.6: 1, 0.05: 1, 0.01: 1,
    1: 1, 156: 1, 1111: 1, 566: 1, 13.5: 1,
    89.3: 1, 894: 1, 990: 1, 34.5: 1, 12.4: 1,
    134: 1, 90: 1, 543: 1, 15.7: 1, 10.5: 1,
    777: 1, 855: 1, 989789: 1, 344.1: 1, 4545454545: 1,
    0.034: 1, 0.89: 1, 0.99: 1, 0.78: 1, 0.17: 1,
    0.1455: 1, 0.035: 1, 0.00000005: 1, 0.000003:1, 0.0000007: 1, 0.0000002: 1, 0.0000000677: 1, 0.000000000455: 1, 0.0000000006775: 1, 0.000004554: 1, 0.000001344: 1, 0.000000345: 1, 0.000000340: 1, 0.000554: 1, 0.00000005565: 1, 0.000000456: 1, 0.00000005434: 1
}

test_data = {
    # ===== Class 0 =====
    -111: 0, -3450: 0, -9: 0, -789: 0,
    -12000: 0, -8984: 0, -1030: 0, -256897: 0,
    -0.1: 0, -0.002: 0, -0.007: 0,-0.00000034:0,-0.0000345: 0, -0.000000056777: 0,
    

    # ===== Class 2 =====
    9999: 1, 1456: 1, 12000: 1, 11000: 1,
    1060: 1, 456: 1, 888: 1, 111: 1, 100940: 1, 0.0000000345: 1, 0.00000000456: 1, 0.00000000545: 1
}

validation_data = {
    # ===== Class 0 =====
    -999: 0, -123345: 0, -9999999: 0, -3: 0, -67: 0,
    -77: 0, -456789: 0, -77777: 0, -88.56: 0, -567.78: 0,
    -55.33: 0, -980.3: 0, -134.23: 0, -989456: 0, -345566: 0,
    -1.1235: 0, -10: 0, -0.01: 0, -0.22: 0, -0.12: 0, -0.155: 0, -0.0000004: 0, -0.000000023: 0, -0.000000000504: 0, -0.000000056: 0,
    
    
    # ===== Class 2 =====
    1956933: 1, 898422: 1, 76: 1, 555: 1,
    22222: 1, 123456: 1, 777777: 1, 1: 1,
    3: 1, 4: 1, 5: 1, 19: 1, 19.5: 1,
    0.11: 1, 0.21: 1, 0.34: 1, 0.45: 1,
    0.111: 1, 1.111: 1, 9999999: 1, 955665455: 1,
    2345677: 1, 765456: 1, 0.0000034: 1, 0.0000000006:1, 0.00000000355: 1, 0.00000000006504: 1, 0.0000003455: 1
}

device = ('cuda' if torch.cuda.is_available() else 'cpu')

x_train = []
y_train = []

x_test = []
y_test = []

x_val = []
y_val = []

mean = 0
std = 0


model = TemperatureClassifier(1, 100, 2).to(device)

x_train, y_train = split_data(train_data)

x_test, y_test = split_data(test_data)

x_val, y_val = split_data(validation_data)

x_train_ten, y_train_ten = load_tensor(x_train, y_train, device)

x_test_ten, y_test_ten = load_tensor(x_test, y_test, device)

x_val_ten, y_val_ten = load_tensor(x_val, y_val, device)


learning(model, x_train_ten, y_train_ten, x_test_ten, y_test_ten, x_val_ten, y_val_ten, epoch=4000)

Inference example

import torch
import torch.nn as nn
from model import TemperatureClassifier
from safetensors.torch import load_file

dic =  load_file('temperature_classifier.safetensors')

device = ('cuda' if torch.cuda.is_available() else 'cpu')

model = TemperatureClassifier(1, 100, 2).to(device)
model.load_state_dict(dic)

print(dic)


print("Write the temperature: ")
x = float(input())

x_tensor = torch.tensor([[x]], dtype=torch.float32).to(device)

model.eval()
with torch.no_grad():
    logits = model(x_tensor)
    print(logits)
    out = torch.argmax(logits, dim=1)
    
print(out.item())
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support