Ich benutze Kolben Server mit Sellerie und redis. Der Fehler ist aufgetreten, wenn .apply_async() aufgerufen wird. Das numpige Array ist Teil der Visualisierung der Ausgabe eines neuralen Netzwerkmodells von Keral. Ich weiß, dass es eine Möglichkeit gibt, Keras-Modell in Json zu konvertieren. Mein Hauptproblem liegt in der Tatsache, dass ich nicht weiß, wann oder wie Sellerie die Umwandlung durchführt, und ich habe keine Kontrolle darüber.Sellerie Fehler: numpy Array ist nicht JSON serializable
Hier ist mein Code:
@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)}
ich alle yaml verfügbar Serializer versucht haben:
EncodeError: cannot represent an object: keras.engine.training.Model object at 0x10fdf26d0>
Beize:
EncodeError: Can't pickle type 'module': attribute lookup builtin.module failed
msgpack:
EncodeError: can't serialize array([[[[-103.93900299, -107.77899933, -123.68000031],... , dtype=float32) (numpy array)
json:
EncodeError: array([[[[-103.93900299, -107.77899933, -123.68000031],... , dtype=float32) (numpy array) is not JSON serializable
Jeder Kommentar oder einen Vorschlag wird sehr geschätzt. Vielen Dank.
'json' ist ein Zeichenfolgenformat, das mit' javascript' kompatibel ist. Es kodiert Wörterbücher, Listen und Strings. Andere 'Python'-Klassen müssen sich in einer dieser Strukturen 'serialisieren'. 'numpy' Arrays tun das nicht automatisch, obwohl es Tools gibt, die helfen können. Suchen Sie etwas über 'keras' und' json'. – hpaulj
Vielen Dank für Ihren Kommentar. Ich weiß, dass es eine Möglichkeit gibt, Keras-Modell in Json zu konvertieren. Mein Hauptproblem liegt in der Tatsache, dass ich nicht weiß, wann oder wie Sellerie die Umwandlung durchführt, und ich habe keine Kontrolle darüber. – matchifang