gist-ailab / SleePyCo

This is an official implementation for "SleePyCo: Automatic Sleep Scoring with Feature Pyramid and Contrastive Learning".
MIT License
35 stars 11 forks source link

Could you help me? Why I get print(set(y_trn_1fd))={0} when I use your EEGDataLoader(cfg, fold, set='train') class ? #6

Open xhl-JMT opened 3 months ago

xhl-JMT commented 3 months ago

This is my code, could you help me find the trouble, many thanks !

import numpy as np from loader import EEGDataLoader

cfg = { "dataset": { "name": "Sleep-EDF-2018", "eeg_channel": "Fpz-Cz", "num_splits": 10, "seq_len": 1, "target_idx": -1,

"root_dir": "./",

        "root_dir": "eeg_data_new/",
    },
    "training_params": {
        "mode": "freezefinetune",
        "max_epochs": 500,
        "batch_size": 64,
        "lr": 0.0005,
        "weight_decay": 0.0001,
        "val_period": 500,
        "early_stopping": {
            "mode": "min",
            "patience": 20
        }
    },
}
fold = 1

train_dataset = EEGDataLoader(cfg, fold, set='train')
val_dataset = EEGDataLoader(cfg, fold, set='val')
test_dataset = EEGDataLoader(cfg, fold, set='test')

print('[INFO] Dataloader prepared')

print("len(train_dataset):\t", len(train_dataset))
print("len(val_dataset):\t", len(val_dataset))
print("len(test_dataset):\t", len(test_dataset))

print("train_dataset[inputs][b].shape:\t", train_dataset[0][0].shape)
print("train_dataset[inputs][e].shape:\t", train_dataset[len(train_dataset)-1][0].shape)
print("train_dataset[labels].shape:\t", train_dataset[0][1].shape)
print("train_dataset[labels].shape:\t", train_dataset[0][1])

def _make_1fd_dat(_xxx_dataset):
    _x_dat_1fd = []
    _y_dat_1fd = []
    for i in range(len(_xxx_dataset)):
        _x_np = _xxx_dataset[0][0].numpy()
        _y_np = _xxx_dataset[0][1].numpy()
        # print("type(_x_np), _x_np.shape:\t", type(_x_np), _x_np.shape)
        # print("type(_y_np), _y_np.shape:\t", type(_y_np), _y_np.shape)
        # print("_y_np:\t", _y_np)
        _x_dat_1fd.append(_x_np)
        _y_dat_1fd.append(_y_np)
    _x_dat_1fd = np.array(_x_dat_1fd)
    _y_dat_1fd = np.array(_y_dat_1fd)
    _y_dat_1fd = _y_dat_1fd.reshape((len(_y_dat_1fd)))
    print("_x_dat_1fd.shape:\t", _x_dat_1fd.shape)
    print("_y_dat_1fd.shape:\t", _y_dat_1fd.shape)
    return _x_dat_1fd, _y_dat_1fd

x_trn_1fd, y_trn_1fd = _make_1fd_dat(train_dataset)
x_vld_1fd, y_vld_1fd = _make_1fd_dat(val_dataset)
x_tst_1fd, y_tst_1fd = _make_1fd_dat(test_dataset)

print(set(y_trn_1fd))   #  {0}, very strange
print(set(y_vld_1fd))  #  {0}, very strange
print(set(y_tst_1fd))   #  {0} , very strange
SeongjuLee commented 1 month ago

I think you get a sample with a fixed index. Replace the following lines

_x_np = _xxx_dataset[0][0].numpy()
_y_np = _xxx_dataset[0][1].numpy()

into

_x_np = _xxx_dataset[i][0].numpy()
_y_np = _xxx_dataset[i][1].numpy()