Я уже узнал о некоторой классификации, использующей CNN, как для Mnist.Но недавно я получил набор данных, который состоит из набора векторов.Обычный набор данных изображения (mnist) похож на nxcxwxh.Тот, который я получил (w * h) x1xc.Цель состоит в том, чтобы обучить сеть классифицировать эти пиксели (как я понимаю, это классификация пикселей).Длина этикетки - это истинная картинка.
Я немного запутался в этой работе.Как я понимаю, для обработки изображений мы используем CNN с другим полем получения, чтобы выполнить операции свертки, чтобы можно было получить функцию для представления изображения.Но в этом случае изображение уже расширяется до набора пикселей.Почему сверточная нейронная сеть все еще подходит?
Тем не менее я не уверен в работе, но я начал пробовать. Я использовал 1d свертку вместо 2d в сети.После 4-Conv1d выход соединяется со слоем softmax, затем подается на функцию потери кроссентропии.Кажется, у меня есть некоторые проблемы с выходными размерами, поэтому сеть не может тренироваться.
Я использую pytorch для выполнения работы.Ниже приведена форма сети, которую я пытаюсь построить.Размеры не соответствуют тем, которые необходимы для функции кроссентропильности.122500 было установлено, чтобы быть номерами образцов.Поэтому я думаю, что свертка была выполнена в направлениях 1-200.
Прежде всего, я хочу знать, правильно ли это реализовать таким образом, используя conv1d, когда я хочу классифицировать пиксели?
Еслиэта мысль была правильной, как я могу продолжать передавать функции в функцию потерь?
Если это не так, могу ли я привести несколько подобных примеров для такой работы?Я новичок в Python, поэтому, если были какие-то глупые ошибки, пожалуйста, укажите.
Спасибо всем.
class network(nn.Module):
"""
Building network
"""
def __init__(self):
super(network, self).__init__()
self.conv1 = nn.Conv1d(in_channels = 1,out_channels = 32,stride = 1,kernel_size = 3)
self.conv2 = nn.Conv1d(in_channels = 32,out_channels = 64,stride = 1,kernel_size = 3)
self.conv3 = nn.Conv1d(in_channels = 64,out_channels = 128,stride = 1,kernel_size = 3)
self.conv4 = nn.Conv1d(in_channels = 128,out_channels = 256,stride = 1,kernel_size = 3)
self.fc = nn.Linear(13, 2)
def forward(self,s):
s = self.conv1(s)
s = F.relu(F.max_pool1d(s, 2))
s = self.conv2(s)
s = F.relu(F.max_pool1d(s, 2))
s = self.conv3(s)
s = F.relu(F.max_pool1d(s, 2))
s = self.conv4(s)
s = F.relu(F.max_pool1d(s, 2))
s = self.fc(s)
s = F.softmax(s,1)
output = model(input)
loss = loss_fn(output, labels)