簡體   English   中英

如何確定CNN Keras中密集層的輸入大小?

[英]How to fix input size of Dense Layer in CNN Keras?

我嘗試使用keras構建人臉識別模型。 我有帶有主題和功能名稱的圖像(我不知道深度學習的很多知識,但是我很快會得到更多信息)

但是當我嘗試擬合我的數據時,出現此錯誤:

ValueError:檢查目標時出錯:預期density_2具有2個維,但是數組的形狀為(3,243,320,3)

我試圖將損失函數從sparse_categorical_crossentropy更改為categorical_crossentropy

通過使用keras的“ to_categorical”功能的一鍵編碼標簽

但這行不通

這是我用圖像和標簽填充列表的方式

###### fill with images
for i in range(0,num_classes):
k=0
for j in range(len(features)):
    k+=1
    if(i < 10):
        sub = "subject0"+str(i)+"."+features[j]+".png"
    else:
        sub = "subject"+str(i)+"."+features[j]+".png"
    imgfile = Image.open(sub)
    img = np.array(imgfile)
    #print(img.shape)
    #print(type(img))
    if(k != 3):
        train.append(img)
        train_labels.append(i)
    else :
        test.append(img)
        test_labels.append(i)

########## train 
train = np.asarray(train)
train_labels = np.asarray(train_labels)

########## test 
test = np.asarray(test)
test_labels = np.asarray(test_labels)

我的班級數目現在是3! (一堂課是一門學科)

以下是圖像的重塑和標准化方法。

# Reshape  243x320 pixels, 1 channel (B/W)
train = train.reshape(train.shape[0], img_rows, img_cols, 1)
# Reshape  243x320 pixels, 1 channel (B/W)
test = test.reshape(test.shape[0], img_rows, img_cols, 1)

# Normalize pixel values: [0-255] --> [0.0-1.0]
train, test = train / 255.0, test / 255.0

# One-hot encode labels
test = to_categorical(test, num_classes)
test_labels = to_categorical(test_labels, num_classes)

我建立一個簡單的CNN模型

######### build cnn models

model = Sequential()
model.add(Conv2D(32, kernel_size=(5, 5), padding='same', activation='relu', input_shape=(img_rows,img_cols,1)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3), padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))


model.compile(
    optimizer='adam',
    loss='categorical_crossentropy',
    metrics=['accuracy'])

batch_size = 128
epochs = 10

model.fit(train, test, validation_data=(train_labels, test_labels), batch_size=batch_size, epochs=epochs)

我認為問題是我模型中某一層的輸出。 我試圖移動展平,但沒有成功。

謝謝你的幫助 !

這個test = to_categorical(test, num_classes)應該是train_labels = ...而您的model.fit(...)調用應該是model.fit(train, train_labels)

這些是我能找到的最驚人的錯誤。

暫無
暫無

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

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