层 sequential_43 的输入 0 与层不兼容::预期 min_ndim=5,发现 ndim=4。已收到完整形状:(None, 32, 32, 100000)
Input 0 of layer sequential_43 is incompatible with the layer: : expected min_ndim=5, found ndim=4. Full shape received: (None, 32, 32, 100000)
我的错误:
Input 0 of layer sequential_43 is incompatible with the layer:
: expected min_ndim=5, found ndim=4. Full shape received: (None, 32, 32, 100000)
我输入的形状:
samples.shape
给出 (32,32,32,100000)
labels.shape
给出 (100000,)
我现在尝试 运行 的代码如下:
model = keras.models.Sequential()
layers = tf.keras.layers
model.add(layers.Conv3D(filters=5, kernel_size=(4,4,4), strides=2, activation='relu', input_shape=(8,32,32,32,1)))
model.add(layers.Conv3D(filters=5, kernel_size=(4,4,4), strides=1, activation='relu'))
model.add(layers.Conv3D(filters=5, kernel_size=(4,4,4), strides=1, activation='relu'))
model.add(layers.Conv3D(filters=5, kernel_size=(4,4,4), strides=1, activation='relu'))
model.add(layers.Conv3D(filters=5, kernel_size=(4,4,4), strides=2, activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(1, activation='relu'))
model.compile(optimizer=Adam(learning_rate=0.0001),loss='mape',metrics=['accuracy'])
model.fit(x=samples,y=labels,validation_split=0.1,epochs=1,shuffle=True,verbose=2)
我看到的所有地方的语法都是 (batchsize,dim1,dim2,dim3,dim4)。我将 batchsize 设置为 8,将数据设置为 32x32x32 立方体,并将颜色设置为 1 维。即使我从 input_shape
中删除 batchsize 并将其作为 batch_size=8
添加到 model.fit
,它也会给出相同的错误。有谁知道为什么?
正如您在问题中所述,维度的顺序是 (batchsize,dim1,dim2,dim3,dim4)
,因此您需要重塑 samples
数组以匹配该顺序。
您可以转置数组以获取样本数作为第一维,并将其展开以获取通道维度(或颜色,如果我重复使用您的术语)到 1。
>>> samples.shape
TensorShape([32, 32, 32, 100000])
>>> samples = tf.expand_dims(tf.transpose(samples,[3,0,1,2]), axis=-1)
>>> samples.shape
TensorShape([100000, 32, 32, 32, 1])
我的错误:
Input 0 of layer sequential_43 is incompatible with the layer:
: expected min_ndim=5, found ndim=4. Full shape received: (None, 32, 32, 100000)
我输入的形状:
samples.shape
给出 (32,32,32,100000)
labels.shape
给出 (100000,)
我现在尝试 运行 的代码如下:
model = keras.models.Sequential()
layers = tf.keras.layers
model.add(layers.Conv3D(filters=5, kernel_size=(4,4,4), strides=2, activation='relu', input_shape=(8,32,32,32,1)))
model.add(layers.Conv3D(filters=5, kernel_size=(4,4,4), strides=1, activation='relu'))
model.add(layers.Conv3D(filters=5, kernel_size=(4,4,4), strides=1, activation='relu'))
model.add(layers.Conv3D(filters=5, kernel_size=(4,4,4), strides=1, activation='relu'))
model.add(layers.Conv3D(filters=5, kernel_size=(4,4,4), strides=2, activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(1, activation='relu'))
model.compile(optimizer=Adam(learning_rate=0.0001),loss='mape',metrics=['accuracy'])
model.fit(x=samples,y=labels,validation_split=0.1,epochs=1,shuffle=True,verbose=2)
我看到的所有地方的语法都是 (batchsize,dim1,dim2,dim3,dim4)。我将 batchsize 设置为 8,将数据设置为 32x32x32 立方体,并将颜色设置为 1 维。即使我从 input_shape
中删除 batchsize 并将其作为 batch_size=8
添加到 model.fit
,它也会给出相同的错误。有谁知道为什么?
正如您在问题中所述,维度的顺序是 (batchsize,dim1,dim2,dim3,dim4)
,因此您需要重塑 samples
数组以匹配该顺序。
您可以转置数组以获取样本数作为第一维,并将其展开以获取通道维度(或颜色,如果我重复使用您的术语)到 1。
>>> samples.shape
TensorShape([32, 32, 32, 100000])
>>> samples = tf.expand_dims(tf.transpose(samples,[3,0,1,2]), axis=-1)
>>> samples.shape
TensorShape([100000, 32, 32, 32, 1])