Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow CoreMLtools和Keras ValueError:需要超过1个值才能解包_Tensorflow_Keras_Coreml - Fatal编程技术网

Tensorflow CoreMLtools和Keras ValueError:需要超过1个值才能解包

Tensorflow CoreMLtools和Keras ValueError:需要超过1个值才能解包,tensorflow,keras,coreml,Tensorflow,Keras,Coreml,我正在使用Keras对Inception V3模型进行微调,以便使用coremltools将其转换为.mlmodel文件 但是,在转换模型时,coremltools会在转换器到达模型的最后一层时抛出一个错误,提示如下: coremltools/models/neural_network.py", line 2501, in set_pre_processing_parameters channels, height, width = array_shape ValueError: need m

我正在使用Keras对Inception V3模型进行微调,以便使用coremltools将其转换为.mlmodel文件

但是,在转换模型时,coremltools会在转换器到达模型的最后一层时抛出一个错误,提示如下:

coremltools/models/neural_network.py", line 2501, in set_pre_processing_parameters
channels, height, width = array_shape

ValueError: need more than 1 value to unpack
我使用了Keras文档中关于以下应用程序的代码:

并添加了一段代码,从以下VGG示例加载我的数据集:

我的最终脚本如下所示,使用TesorFlow作为后端:

加载数据
from keras.preprocessing.image import ImageDataGenerator

img_width, img_height = 299, 299

train_data_dir = 'data/train'
validation_data_dir = 'data/validation'
nb_train_samples = 358
nb_validation_samples = 21
epochs = 1
batch_size = 15

train_datagen = ImageDataGenerator(
    rescale=1. / 255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1. / 255)

train_generator = train_datagen.flow_from_directory(
    train_data_dir,
    target_size=(img_width, img_height),
    batch_size=batch_size,
    class_mode='categorical')

validation_generator = test_datagen.flow_from_directory(
    validation_data_dir,
    target_size=(img_width, img_height),
    batch_size=batch_size,
    class_mode='categorical')
训练模型
base_model = InceptionV3(weights='imagenet', include_top=False)

x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024, activation='relu')(x)
predictions = Dense(7, activation='softmax')(x)

model = Model(inputs=base_model.input, outputs=predictions)

for layer in base_model.layers:
    layer.trainable = False

model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])

model.fit_generator(
    train_generator,
    steps_per_epoch=nb_train_samples // batch_size,
    epochs=epochs,
    validation_data=validation_generator,
    validation_steps=nb_validation_samples // batch_size)

for i, layer in enumerate(base_model.layers):
   print(i, layer.name)

for layer in model.layers[:249]:
   layer.trainable = False
for layer in model.layers[249:]:
   layer.trainable = True

from keras.optimizers import SGD
model.compile(optimizer=SGD(lr=0.0001, momentum=0.9), loss='categorical_crossentropy', metrics=['accuracy'])

model.fit_generator(
    train_generator,
    steps_per_epoch=nb_train_samples // batch_size,
    epochs=epochs,
    validation_data=validation_generator,
    validation_steps=nb_validation_samples // batch_size)

model.save('finetuned_inception.h5')

我写这篇文章是为了回应@SwimBikeRun的请求(因为我需要更多的空间) 我把尤罗变成了凯拉斯,然后凯拉斯变成了科雷姆。为了转换,我使用了这个脚本

在转换过程中,模型最终是这样创建的:

input_layer = Input(shape=(None, None, 3))
...
model = Model(inputs=input_layer, outputs=[all_layers[i] for i in out_index])
而那些“无”输入正是导致CoreML转换失败的原因。对于CoreML,必须知道模型的输入大小。所以我把它改成:

 input_layer = Input(shape=(416, 416, 3)
您的输入大小可能会有所不同

关于你原来的问题:
也许可以检查一下你的
base\u模型。输入相同问题的
size。

你找到解决方案了吗?@TMob我没有。我和你做的不一样,我试图将tiny-YOLOv3转换为CoreML,但最终是输入层在转换时丢失了输入大小(因为Keras不需要它?。不知道)。结果是(None,None,3),而CoreML无法处理“None”。当我把它改为(416416,3)时,它转换得很好。对于完全相同的问题(从《盗梦空间》到《mlmodel》)@TMob,有这个完全相同的问题,你能扩展一下你的解决方案吗?这是有道理的,但我不知道如何注入这种变化。