微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Keras 到 CoreML 的转换失败:“InputLayer”对象不可迭代

如何解决Keras 到 CoreML 的转换失败:“InputLayer”对象不可迭代

Keras 到 CoreML 的转换不起作用,它说“InputLayer”不是可迭代对象。一切正常,但我无法使其正常工作。

我试过这个选项

coremltools.convert(model,input_names = 'image',image_input_names = 'image',input_name_shape_dict={'input_1:0': [3,48,1]},image_scale=1.0/255.0)

但它在 xCode 中编译时结束抛出错误。为什么?因为它可能将模型视为张量流模型并结束应用奇怪的重塑。所以问题是我必须使用 coremltools.converters.keras.convert 但它最终会在 python 中抛出这个错误

'InputLayer' 对象不可迭代

for dense_layer in dense_layers:
    for layer_size in layer_sizes:
        for conv_layer in conv_layers:
            NAME = "{}-conv-{}-nodes-{}-dense-{}".format(conv_layer,layer_size,dense_layer,int(time.time()))
            print(NAME)
            i = i + 1
            print(i)

            model = Sequential()
            model.add(Conv2D(8,(5,5),padding='same',activation='relu',input_shape=X.shape[1:]))
            model.add(MaxPooling2D(pool_size=(2,2),strides=(2,padding='same'))
            model.add(Dropout(0.2))
            model.add(Conv2D(layer_size,(3,3),activation='relu'))
            model.add(MaxPooling2D(pool_size=(2,padding='same'))
            model.add(Dropout(0.2))

            for l in range(conv_layer-1):
                model.add(Conv2D(layer_size,activation='relu'))
                model.add(MaxPooling2D(pool_size=(2,padding='same'))
                model.add(Dropout(0.2))

            model.add(Flatten())

            for _ in range(dense_layer):
                model.add(Dense(layer_size))
                model.add(Activation('relu'))

            model.add(Dense(CLASSNAME_SIZE))
            model.add(Activation('softmax'))

            tensorboard = TensorBoard(log_dir="logs/{}".format(NAME))
            
            model.compile(loss='sparse_categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])
            
            model.fit(X,Y,batch_size=32,epochs=1,validation_data=(X_val,Y_val),shuffle=True,callbacks=[tensorboard])
            model.save('traffic_signsv8.model')
            model.save('traffic_signsv8.h5')
            model = load_model('traffic_signsv8.h5')
            coremlModel = coremltools.converters.keras.convert(model,image_scale=1.0/255.0)
            coremlModel.save('traffic_signsv8.mlmodel')
            spec = coremltools.utils.load_spec("traffic_signsv8.mlmodel")
            input = spec.description.input[0]
            input.type.imageType.colorSpace = ft.ImageFeatureType.RGB
            input.type.imageType.height = 48 
            input.type.imageType.width = 48

            coremltools.utils.save_spec(spec,"Ciao.mlmodel")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。