# Non linear regression methods

Hi every one,

I want to predict continuous values from a CNN model as output by giving an image as input:
below is the code

class MultiLabelNN(nn.Module):
def init(self):
super(MultiLabelNN, self).init()
self.conv1 = nn.Conv2d(3,64, 5)
self.pool = nn.MaxPool2d(2,2)
self.conv2 = nn.Conv2d(64, 128, 5)
self.conv3 = nn.Conv2d(128, 256, 5)
self.conv4 = nn.Conv2d(256,320,5)
self.fc1 = nn.Linear(250880,2048)
self.fc2 = nn.Linear(2048, 1024)
self.fc3 = nn.Linear(1024, 512)
self.fc4 = nn.Linear(512, 6)
def forward(self, x):
x = self.conv1(x)
x = nn.ReLU(x)
x = self.pool(x)
x = self.conv2(x)
x = nn.ReLU(x)
x = self.pool(x)
x = self.conv3(x)
x = nn.ReLU(x)
x = self.pool(x)
x = self.conv4(x)
x = nn.ReLU(x)
x = self.pool(x)
x = x.view(-1, 250880)
x = self.fc1(x)
x = self.fc2(x)
x = self.fc3(x)
x = self.fc4(x)
return x

I want to do support vector regression instead of linear regression in my last fully connected layer self.fc4 = nn.Linear(512, 6)…

my question is that is there any option to do this ??

In order to perform Support Vector Regression, you will have to add a HingeLoss element to your code

A sample script would be the following

``````
# HINGE LOSS
import os
import numpy as np
import torch
from torch import nn

torch.manual_seed(42)
class SVR(nn.Module):
def __init__(self):
super(SVR,self).__init__()
self.linearModel=nn.Linear(100,1)

def forward(self,x):
x = self.linearModel(x)
return x

model=SVR()
def hingeLoss(outputVal,dataOutput,model):
loss1=torch.sum(torch.clamp(1 - torch.matmul(outputVal.t(),dataOutput),min=0))
loss2=torch.sum(model.linearModel.weight ** 2)  # l2 penalty
totalLoss=loss1+loss2
return(totalLoss)

optimizer=torch.optim.SGD(model.parameters(),lr=0.001)

X=np.random.rand(1000,100).astype(np.float32)
Y=np.random.randint(2,size=(1000)).reshape(1000,1).astype(np.float32)

for epoch in range(10000):
inputVal=Variable(torch.from_numpy(X))
outputVal=Variable(torch.from_numpy(Y))