Python 芹菜错误:numpy数组不可JSON序列化

Python 芹菜错误:numpy数组不可JSON序列化,python,json,numpy,serialization,celery,Python,Json,Numpy,Serialization,Celery,我用的是装有芹菜和redis的烧瓶服务器。调用.apply\u async()时出错。numpy阵列是keral神经网络模型输出可视化的一部分。我知道有一种方法可以将keras模型转换为json。我的主要问题在于,我不知道芹菜何时或如何进行转化,我无法控制它 这是我的密码: @celery.task(bind=True) def celery_createDirectoryAndSaveNNOutput(self, pInput, ID, filename, layersToShow, mode

我用的是装有芹菜和redis的烧瓶服务器。调用.apply\u async()时出错。numpy阵列是keral神经网络模型输出可视化的一部分。我知道有一种方法可以将keras模型转换为json。我的主要问题在于,我不知道芹菜何时或如何进行转化,我无法控制它

这是我的密码:

@celery.task(bind=True)
def celery_createDirectoryAndSaveNNOutput(self, pInput, ID, filename, layersToShow, model):
    layer_outputs = [layer.output for layer in model.layers[1:]]
    viz_model = Model(input=model.input, output=layer_outputs)
    features = viz_model.predict(pInput)

    layerOutputs = {}
    folderName = "static/"+ID+"_"+filename

    if not os.path.exists(folderName):
        os.makedirs(folderName)

    for layerIndex in layersToShow:
        images = getFeatureMapImages(features[int(layerIndex)])
        layerOutputs[layerIndex] = []
        for i in range(0, len(images)):
            path = folderName+"/layer"+str(int(layerIndex))+"_"+str(i)+".jpg"
            cv2.imwrite(path, images[i])
            layerOutputs[layerIndex].append(path)
        self.update_state(state='PROGRESS', meta={'current': 0, 'total': 10,"status":filename})

    return {'current': i, 'total': len(layersToShow),'status': "temp"}


@app.route("/nnvisualisation_uploadMultipleImages", methods=["POST"])
def nnvisualisation_uploadMultipleImages():
    uploaded_files = request.files.getlist("file[]")
    weight = request.form.get("weight")
    ID = request.form.get("ID")

    layersToShow = [5]
    modelName = "VGG16"

    preds = {}
    path = os.path.join(STATIC_PATH, uploaded_files[0].filename)
    uploaded_files[0].save(os.path.join(STATIC_PATH, uploaded_files[0].filename))
    pInput, result = preTrainedModel[modelName](path)
    #ERROR HERE:
    task = celery_createDirectoryAndSaveNNOutput.s( pInput=pInput, ID=ID, filename=uploaded_files[0].filename, layersToShow=layersToShow, model=getModel(modelName)).apply_async(serializer='json')
    ...


    return jsonify({}), 202, {'Location': url_for('taskstatus',task_id=task.id)}
我已经尝试了所有可用的序列化程序 亚马尔:

编码器错误:无法表示对象:keras.engine.training.Model 对象位于0x10fdf26d0>

泡菜:

编码器错误:无法pickle类型“module”:属性查找 内置的。模块失败

msgpack:

EncodeError:无法序列化数组([-103.93900299,-107.77899933, -123.6800031],…,dtype=float32)(numpy数组)

json:

编码器错误:数组([-103.93900299,-107.77899933, -123.6800031],…,dtype=float32)(numpy数组)不可JSON序列化

非常感谢您的任何意见或建议。谢谢。

虽然这只保存了
架构
而不是权重等

在任何情况下,您都需要探索keras提供的方法

虽然这只保存了
架构
而不是权重等

在任何情况下,您都需要探索
keras
提供的方法

我的主要问题在于,我不知道芹菜何时或如何进行转化,我无法控制它

有一种方法可以控制转换。 您可以注册定制的json序列化程序,它可以转储numpy数组

请参阅本文件

这是一个很好的例子

我的主要问题在于,我不知道芹菜何时或如何进行转化,我无法控制它

有一种方法可以控制转换。 您可以注册定制的json序列化程序,它可以转储numpy数组

请参阅本文件


还有一个很好的方法。

json
是一种与
javascript
兼容的字符串格式。它对字典、列表和字符串进行编码。其他
python
类必须将自己“序列化”到其中一种结构中。
numpy
数组不会自动做到这一点,尽管有一些工具可以提供帮助。搜索一下
keras
json
。谢谢你的评论。我知道有一种方法可以将keras模型转换为json。我的主要问题在于,我不知道芹菜何时或如何执行转换,我无法控制它。
json
是一种与
javas兼容的字符串格式Script
。它对字典、列表和字符串进行编码。其他
python
类必须将自己“序列化”到其中一个结构中。
numpy
数组不会自动这样做,尽管有一些工具可以提供帮助。对
keras
json
进行一些搜索。谢谢您的评论。我知道有一种方法可以将keras模型转换为json。我的主要问题在于,我不知道Cellery何时或如何执行转换,我无法控制它。谢谢你的评论。问题是转换是由Cellery完成的,所以我无法控制如何将模型更改为json。你能帮我翻译一下吗请告诉我应该把这行代码放在哪里?我不知道芹菜在哪里序列化它。谢谢。谢谢你的评论。问题是转换是由芹菜完成的,所以我无法控制如何将模型更改为json。你能告诉我应该把这行代码放在哪里吗?我不知道芹菜在哪里谢谢你。
# save as JSON
json_string = model.to_json()