【问题标题】:ValueError: Dimensions must be equal (keras)ValueError:尺寸必须相等(keras)
【发布时间】:2020-07-07 12:42:02
【问题描述】:

我正在尝试训练自动编码器,但在重塑 X_train 以使其适合我的模型 model() 时遇到问题。

from tensorflow import keras
from keras.layers import *
from keras.models import Model
from keras.models import Sequential 
from keras.optimizers import Adam

from keras.optimizers import RMSprop

from keras.utils import plot_model

X_train = np.array(X_train, dtype=np.float)
X_test =np.array(X_train, dtype=np.float)

X_train = X_train.reshape(len(X_train), 100,1)
X_test = X_test.reshape(len(X_test), 100,1)

#inputs = Input(shape=(230, 1,100))
epoch = 100
batch = 128

def model():
    m = Sequential()
    # ##m.add(Reshape((,)))
    m.add(Flatten())
    m.add(Dense(512, activation='relu'))
    m.add(Dense(128, activation = 'relu'))
    m.add(Dense(2, activation = 'linear'))
    m.add(Dense(128, activation = 'relu'))
    m.add(Dense(512, activation = 'relu'))
    m.add(Dense(784, activation = 'sigmoid'))
    
    m.compile(loss='mean_squared_error', optimizer = 'rmsprop', metrics = ['accuracy'])
    # Fit data to model m
    m.fit(X_train, X_train, batch_size = batch, epochs = epoch)
    m.summary()
    
    #score = m.evaluate(X_test, Y_test, verbose = 0)
    #print('Test loss:' score[0])
    #print('Test accuracy:', score[1])
    #m.summary()
    
    
mod = model()

我的数据的维度如下:

X_train = (523, 100,1) X_test = (523, 100,1)

【问题讨论】:

  • 你操作数据reshape时最后一个维度好像没用...网络输出中的784与输出维度不同
  • 由于您使用 X_train 训练模型,因此 X_train 模型的输出必须与 X_train 具有相同的维度(即 (batch_size, 100, 1)。尝试更改 m.add(Dense( 784,activation = 'sigmoid')) 到 m.add(Dense(100, activation = 'sigmoid'))。您可以使用 model.input_shape 或 model.output_shape(也可以使用model.summary()).
  • 感谢您的回复。你是对的。我没注意。但是,当我更改为 100 时,我收到以下错误:无法挤压 dim[1],预期维度为 1,'{{node Squeeze}} = Squeeze[T=DT_FLOAT,squeeze_dims=[-1]] 得到 100 (remove_squeezable_dimensions/Squeeze)',输入形状:[?,100]。

标签: python-3.x keras autoencoder


【解决方案1】:

要解决您的问题,请更改以下内容:

X_train = X_train.reshape((-1, 100))
X_test = X_test.reshape((-1, 100))

删除Flatten 层并使用100 神经元作为 cmets 中所述的最后一层。

【讨论】:

    猜你喜欢
    • 2017-07-18
    • 2021-11-08
    • 2021-08-29
    • 2019-10-11
    • 2022-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    相关资源
    最近更新 更多