首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ValueError: sequential_4层的输入0与层::预期的min_ndim=3,found ndim=2不兼容。接收到的完整形状:(无,5000)

ValueError: sequential_4层的输入0与层::预期的min_ndim=3,found ndim=2不兼容。接收到的完整形状:(无,5000)
EN

Stack Overflow用户
提问于 2022-09-06 21:11:20
回答 1查看 38关注 0票数 1

我正在做一个项目,我需要分离睡眠数据和它的标签。但是我被上面提到的错误困住了。

由于我是机器学习方面的新手,如果有人能帮我解决这个问题,我将非常感激。

我使用以下代码实现了一个模型:

代码语言:javascript
复制
EEG_training_data = EEG_training_data.reshape(EEG_training_data.shape[0],   EEG_training_data.shape[1],1)
print(EEG_training_data.shape)# (5360, 5000, 1)
EEG_validation_data = EEG_validation_data.reshape(EEG_validation_data.shape[0], EEG_validation_data.shape[1],1)
print(EEG_validation_data.shape)#(1396, 5000, 1)

label_class = (np.unique(EEG_training_label))
num_classes = label_class.size # num_classes = 5

#define the model using CNN
model = tf.keras.Sequential()
model.add(tf.keras.layers.Conv1D(filters=64, kernel_size= 16, activation='relu', batch_input_shape=(None,5000, 1)))  # #input_shape=(5000, 1)
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.MaxPool1D(8, padding='same'))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(16, activation='relu'))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Dense(num_classes, activation='softmax'))

#Summary of the model defined:
model.summary()

#Define loss function
model.compile(
                      loss=  'categorical_crossentropy', # 'sparse_categorical_crossentropy',
                      optimizer='adam',
                      metrics=[tf.keras.metrics.FalseNegatives(), tf.keras.metrics.FalsePositives(), 'accuracy'])

#one Hot Encoding
y_train_hot = tf.keras.utils.to_categorical(EEG_training_label, num_classes) 
print('New y_train shape: ', y_train_hot.shape)#(5360, 5)

y_valid_hot = tf.keras.utils.to_categorical(EEG_validation_label, num_classes)
print('New y_valid shape: ', y_valid_hot.shape)#(1396, 5)

# apply fit on data
model_history = model.fit(
                            x=EEG_training_data,
                            y=y_train_hot, 
                            batch_size=32,
                            epochs=5,
                            validation_data=(EEG_validation_data, y_valid_hot),
                             )



model_prediction = model.predict(EEG_testing_data)
predicted_matrix = tf.math.confusion_matrix(labels=EEG_testing_label.argmax(axis=1), predictions=model_prediction.argmax(axis=1)).numpy()
print(predicted_matrix)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-06 21:47:16

我没有体验到你所提供的代码的问题。试着执行以下代码,这些代码应该会像预期的那样工作。如果是这样的话,请再次检查所有数据的形状,如EEG_training_data等,如下所示:

代码语言:javascript
复制
import tensorflow as tf
import numpy as np

EEG_training_data = np.ones((5360, 5000, 1))
EEG_validation_data = np.ones((1396, 5000, 1))
EEG_training_label = np.random.randint(5, size=5360)
EEG_validation_label = np.random.randint(5, size=1396)

label_class = (np.unique(EEG_training_label))
num_classes = label_class.size
print(num_classes)  # prints 5

#define the model using CNN
model = tf.keras.Sequential()
model.add(tf.keras.layers.Conv1D(filters=64, kernel_size= 16, activation='relu', batch_input_shape=(None, 5000, 1)))  # input_shape=(5000, 1)
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.MaxPool1D(8, padding='same'))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(16, activation='relu'))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Dense(num_classes, activation='softmax'))

#Summary of the model defined:
model.summary()

#Define loss function
model.compile(loss = 'categorical_crossentropy',
              optimizer='adam',
              metrics=[tf.keras.metrics.FalseNegatives(), tf.keras.metrics.FalsePositives(), 'accuracy'])

#one Hot Encoding
y_train_hot = tf.keras.utils.to_categorical(EEG_training_label, num_classes) 

print('New y_train shape: ', y_train_hot.shape)  #(5360, 5)

y_valid_hot = tf.keras.utils.to_categorical(EEG_validation_label, num_classes)
print('New y_valid shape: ', y_valid_hot.shape)  #(1396, 5)

# apply fit on data
model_history = model.fit(x=EEG_training_data,
                          y=y_train_hot, 
                          batch_size=32,
                          epochs=5,
                          validation_data=(EEG_validation_data, y_valid_hot),
)

model_prediction = model.predict(EEG_validation_data)
predicted_matrix = tf.math.confusion_matrix(labels=EEG_validation_label.argmax(axis=1), predictions=model_prediction.argmax(axis=1)).numpy()
print(predicted_matrix)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73627784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档