Я создаю модель машинного обучения, я хочу прочитать различные значения из текстового файла и обработать их, используя CustomMapping
.Программа выдает System.InvalidOperationException
при запуске CustomMapping
.
Я уже сузил причину для моей функции CustomMapping
, текстовый файл, из которого я читаю, не имеет пустых значений.Я уже дважды проверил все мои объявления переменных и убедился, что все они используют правильные типы.Я догадываюсь, что пользовательское сопоставление интерпретирует 1 и 0 как логические значения, а не как числа с плавающей точкой, хотя я не вижу причин для этого делать это.Я подумал, что было бы важно показать все.
Мой конвейер:
var pipeline = context.Transforms.CustomMapping<ProfileInput, ProfileProcess>(ProfileMapping.Transform, nameof(ProfileMapping))
.Append(context.Transforms.Concatenate("Features", "isBanned", "profileVisibility", "profileConfigured", "lastLogOff", "commentPermission", "timeCreated", "friendCount", "gameBannedFriendsCount", "vacBannedFriendsCount", "gameBannedFriendsPercent", "vacBannedFriendsPercent"));
Мой CustomMapping:
public static void Transform(ProfileInput input, ProfileProcess output)
{
if (input.numberGameBans > 0 || input.numberVacBans > 0)
output.isBanned = false;
output.gameBannedFriendsPercent = input.gameBannedFriendsCount / input.friendCount;
output.vacBannedFriendsPercent = input.vacBannedFriendsCount / input.friendCount;
output.profileVisibility = input.profileVisibility;
output.profileConfigured = input.profileConfigured;
output.lastLogOff = input.lastLogOff;
output.commentPermission = input.commentPermission;
output.timeCreated = input.timeCreated;
output.friendCount = input.friendCount;
output.gameBannedFriendsCount = input.gameBannedFriendsCount;
output.vacBannedFriendsCount = input.vacBannedFriendsCount;
}
ProfileInput:
public class ProfileInput
{
[LoadColumn(0)]
public bool commentPermission;
[LoadColumn(1)]
public float lastLogOff;
[LoadColumn(2)]
public bool profileConfigured;
[LoadColumn(3)]
public float profileVisibility;
[LoadColumn(4)]
public float timeCreated;
[LoadColumn(5)]
public float numberVacBans;
[LoadColumn(6)]
public float numberGameBans;
[LoadColumn(7)]
public float vacBannedFriendsCount;
[LoadColumn(8)]
public float gameBannedFriendsCount;
[LoadColumn(9)]
public float friendCount;
}
ProfileProcess:
public class ProfileProcess
{
public bool isBanned;
public float profileVisibility;
public bool profileConfigured;
public float lastLogOff;
public bool commentPermission;
public float timeCreated;
public float friendCount;
public float gameBannedFriendsCount;
public float vacBannedFriendsCount;
public float gameBannedFriendsPercent;
public float vacBannedFriendsPercent;
}
При запуске pipeline.fit()
я получаю следующее исключение:
System.InvalidOperationException: 'Column' profileVisibility 'имеет значения R4, что не совпадает сранее наблюдавшийся тип Bool. '
Я ожидал, что он успешно завершит код, не выдавая ошибку, фактическим выводом будет модель TransformerChain - я понимаю, что в конвейере еще нет тренератак что модель будет бесполезной, как сейчас.