一个顺序的Keras模型能否接受未展平的多维输入(如图像,即输入形状为每张图像MxN像素)?

我是一个Keras新手,正在尝试构建一个最简单的自编码器。它由三层组成:输入层、编码表示层和输出层。我的数据(训练和验证图像)是一个ndarray,其中每张图像的尺寸为214x214x3(像素 x 像素 x RGB通道)。我以为我可以直接在输入层中使用图像的输入形状,但不知为何我不断遇到错误。

我尝试过展平数据,这样做是可以的。当然我可以这样做,并重塑输出,但我很好奇为什么这样做不行。

# 单个图像的形状和大小
input_shape = x_tr.shape[1:] # --> (214, 214, 3)
input_size = x_tr[0].size
# 编码表示的大小
encoding_dim = 32
compression_factor = float(input_size / encoding_dim)
# 构建模型
autoencoder = Sequential()
autoencoder.add(Dense(encoding_dim, input_shape=input_shape,     activation='relu'))
autoencoder.add(Dense(input_shape, activation='softmax'))
input_img = Input(shape=(input_shape,))
encoder_layer = autoencoder.layers[0]
encoder = Model(input_img, encoder_layer(input_img))
autoencoder.compile(optimizer='adadelta', loss='mean_squared_error')
autoencoder.fit(x_tr, x_tr,                epochs=50,                batch_size=32,                shuffle=True,                verbose=1,                validation_data=(x_va, x_va),                callbacks=[TensorBoard(log_dir='/tmp/autoencoder2')])

我得到了这个错误:

TypeError: unsupported operand type(s) for +: 'int' and 'tuple'

我认为它不期望输入形状看起来像那样,但我不知道如何修复它以接受214x214x3的形状而不是长度为137388的向量。


回答:

Dense 接受一个整数作为输入(神经元的数量),你提供了一个元组。尝试这样做:

output_dim = 214 * 214 * 3
autoencoder.add(Dense(output_dim, activation='softmax'))

你需要展平你的输入/输出,全连接的Dense层期望一个一维的输入/输出。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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