首页 > 解决方案 > 二进制信号数据:keras ValueError: Input 0 of layer sequence is in compatible with the layer: : expected min_ndim=3, found ndim=2

问题描述

我正在尝试训练用于 RF 指纹识别的模型,并从多个设备中捕获样本,每个设备的长度为 100 万。我已经将样本转换为各种图像,并通过以下方式成功地使用该数据形式训练了模型:

imageSize = 224
x_train = np.array(x_train) / 255
x_train.reshape(-1, imageSize, imageSize, 1)                
x_val = np.array(x_val) / 255
x_val.reshape(-1, imageSize, imageSize, 1)
y_train = np.array(y_train)
y_val = np.array(y_val)

model = Sequential()
model.add(Conv2D(96, 7, padding="same", activation="relu", input_shape = (224, 224, 3)))
model.add(MaxPool2D())

model.add(Conv2D(96, 7, padding="same", activation="relu"))
model.add(MaxPool2D())

model.add(Conv2D(192, 7, padding="same", activation="relu"))
model.add(MaxPool2D())
model.add(Dropout(0.4))

model.add(Flatten())
model.add(Dense(384, activation="relu"))
model.add(Dense(6, activation="softmax"))

opt = Adam(learning_rate=0.000001)
model.compile(optimizer = opt, loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=["accuracy"])                        
                    
model.summary()
                    
history = model.fit(x_train, y_train, epochs = 500, validation_data = (x_val, y_val))

但是,尝试对用于创建图像的数组数据(形状 (60, 4000))执行相同操作会产生“ValueError:层顺序的输入 0 与层不兼容::预期 min_ndim=3,找到 ndim =2" 标题中列出的问题。我的代码是:

x_train = np.array(x_train)    
x_train.reshape(-1, 4000, 1)
                                            
x_val = np.array(x_val)
x_val.reshape(-1, 4000, 1)
                    
y_train = np.array(y_train)                        
                    
y_val = np.array(y_val)
                    
model = Sequential()
model.add(Conv1D(96, 7, padding="same", activation="relu", input_shape=(4000, 1)))
model.add(MaxPooling1D())

model.add(Conv1D(96, 7, padding="same", activation="relu"))
model.add(MaxPooling1D())

model.add(Conv1D(192, 7, padding="same", activation="relu"))
model.add(MaxPooling1D())
model.add(Dropout(0.4))

model.add(Flatten())
model.add(Dense(384, activation="relu"))
model.add(Dense(6, activation="softmax"))
                    
opt = Adam(learning_rate=0.000001)                                                                      
model.compile(optimizer = opt, loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=["accuracy"])

model.summary()                       

history = model.fit(x_train, y_train, epochs = 500, validation_data = (x_val, y_val))

就像许多看起来一样,我无法弄清楚为什么这个输入形状不适用于数组数据。任何澄清都会有所帮助。

标签: pythonnumpytensorflowkeras

解决方案


错误:expected min_ndim=3, found ndim=2 清楚地说明了一切。第一个问题,您使用的输入形状是三维 (224, 224, 3),而对于第二个问题,输入形状更改为形状 (4000, 1) 的一维数组。您应该将输入的维度重塑为顺序模型。


推荐阅读