ValueError:检查输入时出错:预期输入_58有3个维度,但得到了具有形状的数组(10000,10020)

2024-09-30 20:21:18 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我试图用形状为(1000010020)的数据构建一个1D CNN自动编码器。 以下是我的设置:

input_wave = Input(shape=(10020,1))
encode1 = Conv1D(16, 16)(input_wave)
pool1 = MaxPooling1D(3)(encode1)
encode2 = Conv1D(32, 60)(pool1)
pool2 = MaxPooling1D(5)(encode2)
encode3 = Conv1D(64, 130)(pool2)
pool3 = MaxPooling1D(5)(encode3)
encode4 = Conv1D(128, 105)(pool3)
up1 = UpSampling1D(10)(encode4)
drop = Dropout(.2)(up1)
up2 = UpSampling1D(10)(drop)
drop2 = Dropout(.2)(up2)
flat  = Flatten()(drop2)
Den = Dense(10020, activation = 'sigmoid', input_shape = (12800, 1))(flat)

autoencoder.compile(optimizer = 'Adam',
                    loss = 'mean_squared_error',
                    metrics = ['accuracy'])

autoencoder = Model(input_wave, Den)
autoencoder.summary()

Here is the summary

不幸的是,我无法发布数据本身,但它的数值介于0和1之间,没有NAs,是波形数据

当我运行data.shape()时,我得到:

(10000, 10020)

当我运行类型(数据)时,我得到:

pandas.core.frame.DataFrame

我认为我的健康声明如下所示:

autoencoder.fit(data,data,
                batch_size = 250,
                epochs = 10)

我得到以下错误:

  ValueError: Error when checking target: expected dense_7 to have 2 dimensions, but got array with shape (10000, 10020, 1)

我尝试使用data.values,并使用以下代码重塑数据:

data = np.reshape(i_data[1].values, (10000, 10020, 1))

但这给了我一个错误:

ValueError: Error when checking target: expected dense_7 to have 2 dimensions, but got array with shape (10000, 10020, 1)

因此,我的人际网络似乎在这两方面都很糟糕。对不起,我不能发布我的数据:(但如果有帮助的话,我可以制作玩具数据!有人知道我的结构问题在哪里吗


Tags: 数据inputdatawaveshapepool1autoencoderpool3
1条回答
网友
1楼 · 发布于 2024-09-30 20:21:18

首先,你的自动编码器的定义很奇怪,我不知道你在用什么作为例子

您必须用相同的形状重建数据,因此您的最后一层需要输出(batch, 10020, 1)的形状,这是您的错误,您正在对数据应用展平和密集,这就是为什么您只有预期的2维输出

以下是一个简单的自动编码器工作示例:

x = Input(shape=(10020, 1), name="input")
h = Conv1D(filters=50, kernel_size=3, activation="relu", padding='same', name='Conv1')(x)
h = MaxPooling1D(pool_size=2, name='Maxpool1')(h)
h = Conv1D(filters=150, kernel_size=3, activation="relu", padding='same', name='Conv2')(h)
h = MaxPooling1D(pool_size=2,  name="Maxpool2")(h)
y = Conv1D(filters=150, kernel_size=3, activation="relu", padding='same', name='conv-decode1')(h)
y = UpSampling1D(size=2, name='upsampling1')(y)
y = Conv1D(filters=50, kernel_size=3, activation="relu", padding='same', name='conv-decode2')(y)
y = UpSampling1D(size=2, name='upsampling2')(y)
y = Conv1D(filters=1, kernel_size=3, activation="relu", padding='same', name='conv-decode3')(y)


autoencoder = Model(x, y)

你可以随心所欲地使用内核大小和过滤器,但是你需要以编码的方式对数据进行解码

此外,由于上一个密集层的存在,您的模型有1.29亿个参数,这是非常重要的

如果你需要更高的精确度,请告诉我

相关问题 更多 >