ValueError: Error when checking input: expected input_58 to have 3 dimensions, but got array with shape (10000, 10020)
ValueError: Error when checking input: expected input_58 to have 3 dimensions, but got array with shape (10000, 10020)
所以我正在尝试使用形状为 (10000, 10020) 的数据构建一维 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()
不幸的是我不能post数据本身,但它的数字,在0和1之间,没有NA,并且是波形数据。
当我 运行 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)
看来我的网络结构很差。对不起,但我不能发布我的数据 :( 但如果有帮助,我可以制作玩具数据!有人知道我的结构问题出在哪里吗?
首先,你的自动编码器定义很奇怪,我不知道你用的是什么。
你必须用相同的形状重建你的数据,所以你的最后一层需要输出 (batch, 10020, 1)
的形状,这是你的错误,你正在对你的数据应用 Flatten 和 Dense,这就是为什么你只有 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)
您可以随心所欲地使用内核大小和过滤器,但您需要以与编码数据相同的方式解码数据。
此外,由于最后一个 Dense 层,您的模型有 1.29 亿个参数,这太多了。
如果您需要更高的精度,请告诉我。
所以我正在尝试使用形状为 (10000, 10020) 的数据构建一维 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()
不幸的是我不能post数据本身,但它的数字,在0和1之间,没有NA,并且是波形数据。
当我 运行 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)
看来我的网络结构很差。对不起,但我不能发布我的数据 :( 但如果有帮助,我可以制作玩具数据!有人知道我的结构问题出在哪里吗?
首先,你的自动编码器定义很奇怪,我不知道你用的是什么。
你必须用相同的形状重建你的数据,所以你的最后一层需要输出 (batch, 10020, 1)
的形状,这是你的错误,你正在对你的数据应用 Flatten 和 Dense,这就是为什么你只有 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)
您可以随心所欲地使用内核大小和过滤器,但您需要以与编码数据相同的方式解码数据。
此外,由于最后一个 Dense 层,您的模型有 1.29 亿个参数,这太多了。
如果您需要更高的精度,请告诉我。