【发布时间】:2018-06-03 08:57:20
【问题描述】:
我正在构建一个基于 VGG-16 预测人类年龄的 CNN,并输入两个 RGB 图像。 (文件类型:jpg)。我在 Python 2.7 的 anaconda 环境中使用 tensorflow 后端。
但是,它总是会引发错误:
Traceback(最近一次调用最后一次):
文件“train2.py”,第 167 行,在 洗牌=真)
文件“/Users/name/anaconda/lib/python2.7/sitepackages/keras/models.py”,第 973 行,适合 validation_steps=validation_steps)
文件“/Users/name/anaconda/lib/python2.7/sitepackages/keras/engine/training.py”,第 1581 行,适合 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)
【问题讨论】:
-
请按照此处所述格式化您的代码:stackoverflow.com/editing-help#comment-formatting 还请对您使用的平台进行更多描述并相应地标记它们
-
@raurunner 感谢您帮助安排代码!
-
有人可以帮我检查一下吗?有点紧急。我必须在下周进行演示......
标签: python-2.7 machine-learning keras anaconda image-recognition