我的意思是,如果在n
模型中输入一个convnet模型,它会给出n
个输出吗?
然而,当我尝试使用瓶颈模型(使用VGG16 convnet构建在其上)时,VGG16 convnet返回的输出少于输入数量的16个。
这是控制台输出:
import numpy as np
train_data = np.load(open('bottleneck_features_train.npy'))
train_data.shape
(8384,7,7,512)
validation_data = np.load(open('bottleneck_features_validation.npy'))
validation_data.shape
(3584,7,7,512)
可以找到生成此输出的脚本here。
上述脚本的堆栈跟踪。
使用Theano后端。
从https://github.com/fchollet/deep-learning-models/releases/download/v0.1/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5下载数据 找到属于120个类别的8400张图片。节省火车功能......
发现属于120个类别的3600张图片。保存测试功能...
培训顶层...
编制瓶颈模型...
培训瓶颈模型......
回溯(最近一次调用最后一次):文件“pretrained_network.py”,第87行,中 train_top_model()
文件“pretrained_network.py”,第82行,在train_top_model中 validation_data =(validation_data,validation_labels))
文件“/home/ashish/ml-projects/venv/local/lib/python2.7/site-packages/keras/models.py",line 845,in fit initial_epoch = initial_epoch)
文件“/home/ashish/ml-projects/venv/local/lib/python2.7/site-packages/keras/engine/training.py”, 第1405行,合适 batch_size = batch_size)
文件“/home/ashish/ml-projects/venv/local/lib/python2.7/site-packages/keras/engine/training.py”, 第_ 1307行,_standardize_user_data _check_array_lengths(x,y,sample_weights)
文件“/home/ashish/ml-projects/venv/local/lib/python2.7/site-packages/keras/engine/training.py”, 第229行,在_check_array_lengths中 '和'+ str(list(set_y)[0])+'目标样本。')
ValueError:输入数组应与目标数组具有相同数量的样本 找到8384个输入样本和8400个目标样本。
答案 0 :(得分:3)
问题在于,例如在你的脚本中:
bottleneck_features_train = model.predict_generator(
generator, nb_train_samples // batch_size)
应该改为:
bottleneck_features_train = model.predict_generator(
generator, (nb_train_samples // batch_size) + 1)
如果没有这个,generator
的调用次数就不够了。