为什么每层都采用初始输入数组形状而不是上一层的输出形状

我的代码中每一层都显示期望一个数组形状,但接收到的却是与输入数组维度相同的形状

我在第一个最大池化层之后添加了注释,以提示错误。如果你查看错误,会发现它期望的是(16, 64, 64, 64),但接收到的却是(16, 128, 128, 1),这恰好是我的输入数组形状。

model = Sequential()model.add(Conv3D(64,3,activation= 'relu',padding='same',input_shape=(16, 128, 128 ,1)))model.add(MaxPooling3D(pool_size=(1,2,2),strides= (1, 2, 2)))#model.add(Conv3D(128,3,activation= 'relu',padding="same"))#model.add(MaxPooling3D(pool_size=(2,2,2),strides= (2, 2, 2)))#model.add(Conv3D(256,3,activation= 'relu',padding="same"))#model.add(Conv3D(256,3,activation= 'relu',padding="same"))#model.add(MaxPooling3D(pool_size=(2,2,2),strides= (2, 2, 2)))#model.add(Conv3D(512,3,activation= 'relu',padding="same"))#model.add(Conv3D(512,3,activation= 'relu',padding="same"))#model.add(MaxPooling3D(pool_size=(2,2,2),strides= (2, 2, 2)))#model.add(Conv3D(512,3,activation= 'relu',padding="same"))#model.add(Conv3D(512,3,activation= 'relu',padding="same"))#model.add(MaxPooling3D(pool_size=(2,2,2),strides= (2, 2, 2)))#model.add(Dense(output_dim= 4096,activation= 'linear' ))#model.add(Dense(output_dim= 4096,activation= 'softmax' ))

我接收到的错误是

str(data_shape))

ValueError: 检查目标时出错:期望max_pooling3d_4的形状为(16, 64, 64, 64),但得到的数组形状为(16, 128, 128, 1)

为什么会这样?感谢任何回应。


回答:

问题与输入形状无关,而是与你在训练模型时提供给模型的标签数组的形状有关。错误中明确指出了这一点:

检查目标时出错

这里的“目标”指的是模型的输出。在你的最小示例中,池化层的输出形状为(16, 64, 64, 64)

期望max_pooling3d_4的形状为(16, 64, 64, 64)

然而,你提供的输出形状为(16, 128, 128, 1)

但得到的数组形状为(16, 128, 128, 1)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注