【问题标题】:How to solve keras fit function error "All input arrays (x) should have the same number of samples"?如何解决 keras 拟合函数错误“所有输入数组 (x) 应具有相同数量的样本”?
【发布时间】:2019-10-28 05:47:47
【问题描述】:

我以Integrating CITEseq data with Deep Learning 为例。 代码一直工作到示例的第三部分,它应该训练自动编码器。由于我是 keras 模型的新手,我基本上只是复制和粘贴代码,所以我不知道网站上的那个是如何工作的,而我的不是。

我已经尝试从

改变 fit funcion
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) 的 numpy 数组。 模型总结为:

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
__________________________________________________________________________________________________

我尝试应用 fit 函数时遇到的错误是:

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

谢谢!

【问题讨论】:

    标签: python keras autoencoder data-integration


    【解决方案1】:

    Keras 期望输入数据的第一个轴是样本数。正如你所说,X_scRNAseq 的形状是(36280, 8617)X_scProteomics 的形状是(13, 8617)。 Keras 期望第一个轴是样本数,在这种情况下不正确。

    我相信,解决方案是像这样重塑 X_scRNAseqX_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)
    

    【讨论】:

      猜你喜欢
      • 2020-05-13
      • 1970-01-01
      • 2018-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      • 2018-07-10
      • 2017-10-26
      相关资源
      最近更新 更多