Как устранить ошибку функции подбора керас «Все входные массивы (x) должны иметь одинаковое количество выборок»? - PullRequest
0 голосов
/ 28 октября 2019

Я следую примеру Интеграция данных CITEseq с Deep Learning . Код работал до третьей части примера, где предполагается обучать автоэнкодеру. Поскольку я новичок в моделях keras, я в основном просто копирую и вставляю код, поэтому я не знаю, как работает тот, что на сайте, а мой нет.

Я пытался изменитьустановите функцию от

estimator = autoencoder.fit([X_scRNAseq, X_scProteomics],
                            [X_scRNAseq, X_scProteomics],
                            epochs = 100, batch_size = 128,
                            validation_split = 0.2, shuffle = True, verbose = 1)

до

estimator = autoencoder.fit([X_scRNAseq, X_scRNAseq],
                            [X_scRNAseq, X_scRNAseq],
                            epochs = 100, batch_size = 128,
                            validation_split = 0.2, shuffle = True, verbose = 1)

, чтобы решить проблему с тем же количеством образцов, и она сработала, но это не обучает автоматический кодер так, как это должно быть.

И X_scRNAseq, и X_scProteomics являются массивами с множеством элементов (36280, 8617) и (13, 8617) соответственно. Сводка модели:

Model: "model_1"
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
scRNAseq (InputLayer)           (None, 8617)         0                                            
__________________________________________________________________________________________________
scProteomics (InputLayer)       (None, 8617)         0                                            
__________________________________________________________________________________________________
Encoder_scRNAseq (Dense)        (None, 50)           430900      scRNAseq[0][0]                   
__________________________________________________________________________________________________
Encoder_scProteomics (Dense)    (None, 10)           86180       scProteomics[0][0]               
__________________________________________________________________________________________________
concatenate_1 (Concatenate)     (None, 60)           0           Encoder_scRNAseq[0][0]           
                                                                 Encoder_scProteomics[0][0]       
__________________________________________________________________________________________________
Bottleneck (Dense)              (None, 50)           3050        concatenate_1[0][0]              
__________________________________________________________________________________________________
Concatenate_Inverse (Dense)     (None, 60)           3060        Bottleneck[0][0]                 
__________________________________________________________________________________________________
Decoder_scRNAseq (Dense)        (None, 8617)         525637      Concatenate_Inverse[0][0]        
__________________________________________________________________________________________________
Decoder_scProteomics (Dense)    (None, 8617)         525637      Concatenate_Inverse[0][0]        
==================================================================================================
Total params: 1,574,464
Trainable params: 1,574,464
Non-trainable params: 0
__________________________________________________________________________________________________

Ошибка, которую я получаю при попытке применить функцию подгонки:

ValueError: All input arrays (x) should have the same number of samples. Got array shapes: [(36280, 8617), (13, 8617)]

Спасибо!

1 Ответ

1 голос
/ 28 октября 2019

Керас ожидает, что первой осью ваших входных данных будет количество выборок. Как вы сказали, форма X_scRNAseq равна (36280, 8617), а форма X_scProteomics равна (13, 8617). Керас ожидает, что первая ось будет числом сэмплов, что в данном случае неверно.

Решение, я считаю, состоит в том, чтобы изменить и X_scRNAseq, и X_scProteomics следующим образом:

X_scRNAseq = np.swapaxes(X_scRNAseq, 0, 1)   #(8617, 36280)
X_scProteomics = np.swapaxes(X_scProteomics, 0, 1)  #(8617, 13)

Тогда подгоните свою модель:

estimator = autoencoder.fit([X_scRNAseq, X_scProteomics],
                            [X_scRNAseq, X_scProteomics],
                            epochs = 100, batch_size = 128,
                            validation_split = 0.2, shuffle = True, verbose = 1)
...