簡體   English   中英

ValueError:layersequential_4 的輸入 0 與 layer 不兼容::預期 min_ndim=3,發現 ndim=2。 收到的完整形狀:(無,5000)

[英]ValueError: Input 0 of layer sequential_4 is incompatible with the layer: : expected min_ndim=3, found ndim=2. Full shape received: (None, 5000)

我正在做一個需要分離睡眠數據及其標簽的項目。 但我被上面提到的錯誤困住了。

由於我是機器學習方面的新手,如果有人能幫助我解決這個問題,我將不勝感激。

我使用以下代碼實現了 model:

EEG_training_data = EEG_training_data.reshape(EEG_training_data.shape[0],   EEG_training_data.shape[1],1)
print(EEG_training_data.shape)
EEG_validation_data = EEG_validation_data.reshape(EEG_validation_data.shape[0], EEG_validation_data.shape[1],1)
print(EEG_validation_data.shape)

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

#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)

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

# 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),
                             )

您的EEG_training_data形狀錯誤。 嘗試執行以下代碼,您將不會遇到任何問題:

import tensorflow as tf
import numpy as np

num_classes = 10  # example, you should have your number of classes

#define the model using CNN
model = tf.keras.Sequential()
model.add(tf.keras.layers.Conv1D(filters=64, kernel_size= 16, activation='relu', input_shape=(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'])


# apply fit on dummy data to make you understand what shape you should have here
model_history = model.fit(x=np.ones((2, 5000, 1)),
                          y=np.ones((2, num_classes)), 
                          batch_size=32,
                          epochs=5)

您必須再次檢查您的EEG_training_data ,並確保您具有如下形狀(number of samples, 5000, 1) 也就是說,就像您在設置input_shape=(5000, 1)時要求的那樣。

注意:由於我不知道您的訓練數據的原始形狀,因此我使用np.ones((2, 5000, 1))創建了一個虛擬訓練數據,模擬了一個具有所需形狀的兩個樣本的數組:你應該讓它工作的形狀(除了2,你應該清楚地保持你的樣本數量)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM