在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ 用keras構(gòu)建CNN做圖片多分類問題,關(guān)于label向量的維度問題

用keras構(gòu)建CNN做圖片多分類問題,關(guān)于label向量的維度問題

網(wǎng)絡(luò)的結(jié)構(gòu)是這樣的:

#1st layer
model.add(Conv2D(20, 5, 5, activation='sigmoid', input_shape=(32, 32, 1)))
model.add(MaxPool2D(pool_size=(2, 2)))
#2nd layer
model.add(Conv2D(30, 5, 5, activation='sigmoid'))
model.add(MaxPool2D(pool_size=(2, 2)))
#fully connected layer
model.add(Flatten())
model.add(Dense(500, init='normal', activation='sigmoid'))
# model.add(Dropout(0.5))
# model.add(Dense(10, activation='sigmoid'))
#model.add(Reshape((-1, 5)))
model.add(Dense(5, init='normal', activation='softmax'))

調(diào)用網(wǎng)絡(luò)時:

model.fit(x=traindata, y=trainlabel, batch_size=16, nb_epoch=15, shuffle=True, verbose=1, validation_data=(testdata, testlabel))

報錯是這個:
ValueError: Error when checking input: expected conv2d_1_input to have 4 dimensions, but got array with shape (500, 5)

然后x向量為4維的圖片信息,y向量為圖片的標(biāo)簽,他們的shape分別是(500, 32, 32, 1),(500, 5),就是不懂為什么y向也需要是4維的呢

回答
編輯回答
蔚藍(lán)色

題主其實(shí)想問的是"為什么x向量也是4維"而不是y吧。假如我沒有理解錯的話,那么:

問題在于你的traindatashape那里。你可以檢查一下你的traindata.shape()。正確的維度應(yīng)該是(500,32,32,1),如果傳進(jìn)去的是(500,32,32)就會報題主描述的錯誤,輸入維度和層數(shù)定義維度不符合。

你可以嘗試復(fù)現(xiàn)一下錯誤,隨機(jī)生成不同shape的矩陣傳進(jìn)去試一下。traindata = numpy.random.rand(500, 32, 32)traindata = numpy.random.rand(500, 32, 32, 1)。你會發(fā)現(xiàn)前者會報錯。

其實(shí)每一張二維圖片并不是只有兩個維度,還有一個顏色通道。彩色圖片又rgb三個通道,所以是3,黑白圖片則是1。你的traindata應(yīng)該是(數(shù)據(jù)集個數(shù),圖片長度像素,圖片寬度像素,圖片顏色通道數(shù))

解決方式可以對traindata全部添加一個值為1(如果是彩色圖片則添加3)的第四個維度即可。

2017年6月24日 18:46