python - 二进制信号数据: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))
就像许多看起来一样,我无法弄清楚为什么这个输入形状不适用于数组数据。任何澄清都会有所帮助。
解决方案
错误:expected min_ndim=3, found ndim=2 清楚地说明了一切。第一个问题,您使用的输入形状是三维 (224, 224, 3),而对于第二个问题,输入形状更改为形状 (4000, 1) 的一维数组。您应该将输入的维度重塑为顺序模型。
推荐阅读
- python - Ansible 中的 Python 版本更改
- angular - 使用 PrimeNG 在反应式表单上显示复选框
- c# - 带有定义网格(布局)的 WPF TabItem 样式
- android - 有没有办法清除应用程序(Android)中的所有任务?
- python - 获得每年python的最高值
- javascript - 换行符后 getBoundingClientRect 的定位不正确
- php - Laravel 资源 - 从关系中获取数据
- spring-data - 为什么spring框架仍然没有couchbase“分析查询”支持
- virtual-machine - 在主机上访问 VM 的 localhost
- android - 反应本机重命名错误 - 应用程序不断停止