import gradio as gr import torch import torch.nn as nn import time import math class Lreg(nn.Module): def __init__(self): super(Lreg,self).__init__() self.l = nn.Linear(1,1) def forward(self,x): y = self.l(x) return y model = Lreg() crit = nn.MSELoss() optim = torch.optim.SGD(model.parameters(),lr=0.01) def weightsbias(weight,bias,predicted,progress=gr.Progress()): weight = float(weight) bias = float(bias) predicted = float(predicted) x = torch.randn(1000) y = (x*weight)+bias progress(0,desc="Starting") model.train() for i in progress.tqdm(range(1,100)): for idx,ele in enumerate(x): ele = ele.unsqueeze(0) out = model(ele) optim.zero_grad() loss = crit(out,y[idx].unsqueeze(0)) loss.backward() optim.step() model.eval() t = torch.tensor([predicted],dtype=torch.float32) rout = model(t) c = model.state_dict() return [rout.item(),c['l.weight'].item(),c['l.bias'].item()] with gr.Blocks() as iface: weights = gr.Textbox(label="Weights") bias = gr.Textbox(label="Bias") predicted = gr.Textbox(label="Prediction Number") output = gr.Number(label="Output Predicted") w = gr.Number(label="Calculated Weight ") b = gr.Number(label="Calculated Bias ") train = gr.Button("Train") train.click(fn=weightsbias, inputs=[weights,bias,predicted], outputs=[output,w,b]) iface.queue(concurrency_count=10).launch()