Я хочу использовать интерфейс r для API набора данных tenorflow2.0 (т. Е. Посмотрите здесь: tfdatasets ) для обучения простого керас мультиклассовая классификационная модель. Проблема в том, что данные обучения поступают из многих csv -файлов, каждый файл содержит только данные для одной целевой категории. Когда я использую только некоторые наблюдения и включаю все данные в один dataframe в памяти, нет никаких препятствий, потому что я могу просто преобразовать целевую переменную (которая является строкой), используя keras::to_categorical()
:
train_labels <- train_data %>%
select(label) %>%
mutate(label = factor(label)) %>%
mutate(label_int = as.numeric(label) - 1)
train_labels_tensor <- keras::to_categorical(train_labels$label_int)
Но использование всех данных таким способом потребляет слишком много памяти, так что это больше не вариант. Данные структурированы следующим образом:
/training/label_1.csv
/training/label_2.csv
/training/label_3.csv
...
/training/label_50.csv
, каждый файл содержит тысячи строк. Каждый файл имеет одинаковые переменные, первая - это символьное значение (целевая метка), остальные - числовые характеристики. Я хочу передавать данные в пакетном режиме на модель.
На первом шаге, как мне подготовить целевую переменную при чтении данных из файла, когда информация о других метках отсутствует в этом файле, потому что каждый файл содержит только одно и то же значение для цели метка? То есть я не знаю, как преобразовать эту одну переменную в правильную тензорную матрицу, например, с 50 столбцами.
Вторым шагом было бы убедиться, что функции одинаковы между файлами. В данный момент я делаю это перед этапом обучения, т. Е. Читаю в каждом файле, выполняю все необходимые этапы подготовки данных и заполняю недостающие функции прогнозирования, чтобы у каждого файла были одинаковые столбцы, затем снова сохранял файл на диск. , Но позже было бы здорово сделать это напрямую с помощью API набора данных. Например:
label_1.csv has columns:
y | x_1 | x_2 | x_3
label_2.csv has columns:
y | x_1 | x_3 | x_4
...
label_50.csv has columns:
y | x_36 | x_37 | x_38
И при чтении файлов с диска с помощью API набора данных целевая переменная преобразуется в необходимую тензорную матрицу, например, для первого файла y:
[,1] [,2] [,3] [...] [,50]
[1,] 1 0 0 ... 0
[2,] 1 0 0 ... 0
[3,] 1 0 0 ... 0
, а переменные объекта расширены и предварительно обработаны до (например, label_1.csv):
[,x_1] [,x_2] [,x_3] [,x_4] [...] [,x_36] [,x_37] [,x_38]
[1,] .3 .67 -.97 0 0 ... 0 0
[2,] -.1 -.43 .74 0 0 ... 0 0
[3,] .25 .12 -.27 0 0 ... 0 0
Здесь каждый отсутствующий элемент в одном файле должен быть добавлен и заполнен нулями, которые представляют отсутствующие значения для этой одной метки класс.
Есть предложения? Большое спасибо!