我正在构建一个CNN来预测基于VGG-16的人类年龄,并提供两个RGB图像 . (filetype:jpg) . 我在Python 2.7中使用了anoronda环境中的tensorflow后端 .
但是,它总是会引发错误:
回溯(最近一次调用最后一次):文件“train2.py”,第167行,在shuffle = True)文件“/Users/name/anaconda/lib/python2.7/sitepackages/keras/models.py",line 973 ,in fit validation_steps = validation_steps)文件“/Users/name/anaconda/lib/python2.7/sitepackages/keras/engine/training.py”,第1581行,in fit batch_size = batch_size)文件“/ Users / name / anaconda /lib/python2.7/sitepackages/keras/engine/training.py“,第1418行,_standardize_user_data exception_prefix ='target')文件”/Users/name/anaconda/lib/python2.7/sitepackages/keras/engine/ training.py“,第141行,在_standardize_input_data str(array.shape)中)ValueError:检查目标时出错:预期activation_17有2个维度,但得到的数组有形状(1,256,256,3)
我该如何解决这个错误?这是代码:
import keras
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
from keras.layers import Activation
from keras.layers import Flatten
from keras.layers import Conv2D
from keras.layers import MaxPooling2D
from keras.layers import BatchNormalization
from keras.utils import np_utils
import cv2
from PIL import Image
import numpy as np
from sklearn.cross_validation import train_test_split
from sklearn.model_selection import train_test_split
name_path = ["pathname"]
new_age_list=[45,52]
img_rows=256
img_cols=256
img_array =
np.array([np.array(Image.open(i).resize((img_rows,img_cols),Image.BILINEAR)) for i in name_path[0:2]],"f")
(X, y) = (img_array[0:2],new_age_list[0:2])
y=np.asarray(y)
X=X.reshape(2,256,256,3)
# STEP 1: split X and y into training and testing sets
train_data, train_label,test_data, test_label= train_test_split(X, y,
test_size=0.5, random_state=4)
train_data = train_data.astype('float32')
test_data = test_data.astype('float32')
train_data = train_data / 255
test_data = test_data / 255
""" Model """
model = Sequential()
""" Block 1 """
model.add(Conv2D(64, (3,3), padding='same',
border_mode='valid',input_shape=(256,256,3)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Conv2D(64, (3,3)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
""" Block 2 """
model.add(Conv2D(128, (3,3)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Conv2D(128, (3,3)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
""" Block 3 """
model.add(Conv2D(256, (3,3)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Conv2D(256, (3,3)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Conv2D(256, (3,3)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
""" Block 4 """
model.add(Conv2D(512, (3,3)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Conv2D(512, (3,3)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Conv2D(512, (3,3)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
""" Block 5 """
model.add(Conv2D(512, (3,3)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Conv2D(512, (3,3)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Conv2D(512, (3,3)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
""" Flatten """
model.add(Flatten())
model.add(Dense(512))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dense(128))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dense(32))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dense(1))
model.add(BatchNormalization())
model.add(Activation('softmax'))
""" Optimizer """
opt = keras.optimizers.rmsprop(lr=config.learning_rate,
decay=config.decay)
print model.summary()
model.compile(loss='mean_squared_error', optimizer=opt, metrics=
['accuracy'])
""" Fit Data """
batch_size = 512
epoch = 1000
learning_rate = 1e-4
decay = 1e-7
for i in range(epoch):
model.fit(train_data, train_label,
batch_size=batch_size,
epochs=int(epoch/epoch),
validation_data=(test_data, test_label),
shuffle=True)
1 回答
我假设“activation_17”指的是最后一个激活层,即“softmax”层 . 当您的图像没有问题地传播到图层时,我认为标签的尺寸存在问题 .
检查documentation for
sklearn.model_selection.train_test_split
后,您似乎错误地从train_test_split()
分配了返回值 .试试吧: