Size: a a a

2020 August 11

CC

Cool Cooler in C++ Together 2.0
А функция load_idx_file загружает idx файлы
Довольно простенький формат файлов, который по сути хранит C массив в big-endian
источник

CC

Cool Cooler in C++ Together 2.0
/*
* source: http://yann.lecun.com/exdb/mnist/
THE IDX FILE FORMAT
the IDX file format is a simple format for vectors and multidimensional matrices of various numerical types.

The basic format is

magic number
size in dimension 0
size in dimension 1
size in dimension 2
.....
size in dimension N
data

The magic number is an integer (MSB first). The first 2 bytes are always 0.

The third byte codes the type of the data:
0x08: unsigned byte
0x09: signed byte
0x0B: short (2 bytes)
0x0C: int (4 bytes)
0x0D: float (4 bytes)
0x0E: double (8 bytes)

The 4-th byte codes the number of dimensions of the vector/matrix: 1 for vectors, 2 for matrices....

The sizes in each dimension are 4-byte integers (MSB first, high endian, like in most non-Intel processors).

The data is stored like in a C array, i.e. the index in the last dimension changes the fastest.
*/
источник

CC

Cool Cooler in C++ Together 2.0
Вот небольшое описание формата
источник

CC

Cool Cooler in C++ Together 2.0
Я пока что в таких файлах храню веса моей нейронки
источник

CC

Cool Cooler in C++ Together 2.0
О, кста, насчёт этого формата
источник

CC

Cool Cooler in C++ Together 2.0
Вот у меня комп little-endian
Но чтобы хранить float'ы, мне надо менять местами байты?
источник

A

Alex Ф-ф-фэils!🌠︙... in C++ Together 2.0
Я бы шаблоны взяо для типов и для политики чтения endianness
источник

CC

Cool Cooler in C++ Together 2.0
Alex Ф-ф-фэils!🌠︙
Я бы шаблоны взяо для типов и для политики чтения endianness
Хм... В load_idx_file?
Просто Just_load_idx подразумевает, что юзер сам знает, какой ему тип нужен, будет загружать нужный idx фйл
источник

CC

Cool Cooler in C++ Together 2.0
Alex Ф-ф-фэils!🌠︙
Я бы шаблоны взяо для типов и для политики чтения endianness
А куда политику чтения endianness?
источник

CC

Cool Cooler in C++ Together 2.0
Cool Cooler
Вот у меня комп little-endian
Но чтобы хранить float'ы, мне надо менять местами байты?
И вот это интересно
источник

CC

Cool Cooler in C++ Together 2.0
На компах с little-endian и big-endian float'ы хранятся одинаково или по-разному?
источник

CC

Cool Cooler in C++ Together 2.0
Вроде же у float как бы закреплённая в стандарте последовательность битов, ну и значит бит 0 должен быть в байте 0, а бит 31 — в байте 3
источник

A

Alex Ф-ф-фэils!🌠︙... in C++ Together 2.0
Cool Cooler
На компах с little-endian и big-endian float'ы хранятся одинаково или по-разному?
Эндиан он про порядок чтения байтов
источник

CC

Cool Cooler in C++ Together 2.0
Alex Ф-ф-фэils!🌠︙
Эндиан он про порядок чтения байтов
Ну да
источник

CC

Cool Cooler in C++ Together 2.0
Но всё-таки float'ы одинаково хранятся или по-разному?
источник

CC

Cool Cooler in C++ Together 2.0
Alex Ф-ф-фэils!🌠︙
Я бы шаблоны взяо для типов и для политики чтения endianness
Как примерно такой шаблон должен выглядеть?
источник

A

Alex Ф-ф-фэils!🌠︙... in C++ Together 2.0
template <typename Type, typename Endianness = little>
auto load_idx(fs::path & file);
источник

CC

Cool Cooler in C++ Together 2.0
Alex Ф-ф-фэils!🌠︙
template <typename Type, typename Endianness = little>
auto load_idx(fs::path & file);
источник

CC

Cool Cooler in C++ Together 2.0
А чё за little делать?
источник

CC

Cool Cooler in C++ Together 2.0
Это макрос должен быть?
источник