簡體   English   中英

Keras CNN 問題

[英]Keras CNN issue

我正在嘗試編寫一個 Siamese 網絡,使用負采樣,代碼僅包含 20 個示例(包括正和負)每個示例包括 2 個圖像(x1,x2)和一個指示圖像是否相同的輸出

image1           image1        1
image1           image2        0

為此,我只想獲得最后一層,即 Keras 中的 Dense() 層,分別是 X1 和 X2。

X1 的形狀是 20,28,28,1 和 X2 是 20,28,28,1 兩者的類型都是 numpy.ndarray

但是當我應用 CNN 模型時,它給出了以下錯誤。

“類型錯誤:添加的圖層必須是類圖層的實例。找到:(28, 28, 1)

見下面的python代碼

model = Sequential([(Image1[0].shape),
            Conv2D(16,kernel_size=(3,3),strides=[1,1],padding='same',kernel_initializer=keras.initializers.glorot_uniform(),name='conv1'),
            Activation('relu'),
            MaxPool2D(pool_size=(2, 2)),
            Conv2D(32,kernel_size=(3,3),strides=[2,2],padding='same',kernel_initializer=keras.initializers.glorot_uniform(),name='conv2'),
            Activation('relu'),
            Conv2D(64,kernel_size=(3,3),strides=[2,2],padding='same',kernel_initializer=keras.initializers.glorot_uniform(),name='conv3'),
            Activation('relu'),
            MaxPool2D(pool_size=(2, 2)),
            Flatten(),
            Dense(20)
          ])

有人可以幫我解決這個錯誤嗎?

謝謝薩欽

第一個模型層應指定您要提供的圖像的形狀。 在您的情況下,您將圖像形狀添加為圖層。

看看如何做到這一點:

IM_WIDTH = 128
IM_HEIGHT = 128

model = Sequential(
Conv2D(16, input_size=(IM_HEIGHT, IM_WIDTH, 3), kernel_size=(3,3),strides=[1,1],padding='same',kernel_initializer=keras.initializers.glorot_uniform(),name='conv1'),
            Activation('relu'),
            MaxPool2D(pool_size=(2, 2)),
            Conv2D(32,kernel_size=(3,3),strides=[2,2],padding='same',kernel_initializer=keras.initializers.glorot_uniform(),name='conv2'),
            Activation('relu'),
            Conv2D(64,kernel_size=(3,3),strides=[2,2],padding='same',kernel_initializer=keras.initializers.glorot_uniform(),name='conv3'),
            Activation('relu'),
            MaxPool2D(pool_size=(2, 2)),
            Flatten(),
            Dense(20)
          ])

暫無
暫無

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

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