Я пытаюсь построить сеть 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 ~