Моя модель CNN не соответствует моим данным, потери не уменьшаются, а выходные данные являются ненормальными - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь построить сеть CNN для прогнозирования оставшегося срока полезного использования LiB, входной тензор - это матрица из одного канала размером 100x3, содержащая значение Capacity-Voltage-Tempuration (для каждого столбца) одного цикла (средняя выборка), и для каждой информации о цикле я получил номер ПРАВИЛА (например, 850 означает, что батарея получила 850 циклов до конца срока службы) в качестве метки.

Поскольку более старая батарея имеет различную кривую емкость-напряжение-температура по сравнению с Я полагаю, что в более новой модели эта разница может быть учтена, так что она может прогнозировать ПРАВИЛО.

Я использую нормализацию Мин-Макс для каждого столбца во входном тензоре и преобразую число ПРАВ в процентах как метку.

Вот моя модель

Network(
  (conv1): Sequential(
    (0): Conv2d(1, 32, kernel_size=(2, 2), stride=(1, 1), padding=(1, 1))
    (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    (2): ReLU()
    (3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
  )
  (conv2): Sequential(
    (0): Conv2d(32, 48, kernel_size=(2, 2), stride=(1, 1), padding=(1, 1))
    (1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    (2): ReLU()
  )
  (conv3): Sequential(
    (0): Conv2d(48, 64, kernel_size=(2, 2), stride=(1, 1), padding=(1, 1))
    (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    (2): ReLU()
  )
  (conv4): Sequential(
    (0): Conv2d(64, 64, kernel_size=(2, 2), stride=(1, 1), padding=(1, 1))
    (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    (2): ReLU()
  )
  (conv5): Sequential(
    (0): Conv2d(64, 64, kernel_size=(2, 2), stride=(1, 1), padding=(1, 1))
    (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    (2): ReLU()
  )
  (fc1): Linear(in_features=38880, out_features=12960, bias=True)
  (fc2): Linear(in_features=12960, out_features=6024, bias=True)
  (fc3): Linear(in_features=6024, out_features=1024, bias=True)
  (out): Linear(in_features=1024, out_features=1, bias=True)
)

Адам для оптимизатора и RMSE as loss_fun c

Проблема в том, что после тренировки используются данные одной батареи (содержит 1851 тактов) в течение 10 эпох , Я считаю, что avg_loss составляет около 0,4, что означает 40% отклонения при прогнозировании жизни, и модель крайне низкая чувствительность к данным для м различных оставшихся жизненных циклов. Когда я проверяю каждый проход l oop, я обнаруживаю, что выходной номер всегда находится рядом с последним выходом.

Что я должен сделать, чтобы соответствовать моим данным? THX ~

...