keras不在docker容器上工作,但不会抛出错误

问题描述 投票:1回答:1

我在一个项目中与Keras合作,Keras不知何故不起作用。

这就是为什么我想用官方项目来测试它,看看会发生什么。官方项目的代码是this

我有一个用于服务项目的烧瓶应用程序,因为它将在EC2实例上。端点看起来如此:

@app.route('/ocr/test_keras', methods=['GET'])
def test_keras():
    Thread(target=continue_test_keras, args=()).start()
    return jsonify('Success')

def continue_test_keras():
    tk.run()
    print('tests done')

tk看起来如此:

from __future__ import print_function

import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.optimizers import RMSprop
import tensorflow as tf


GRAPH = tf.get_default_graph()


def run():
    with GRAPH.as_default():
       ...

(我得使用图表,因为我正在使用tensorflow和多线程,请参阅this

现在奇怪的行为。当它在docker容器内时,最后发生的事情就是这样:

Total params: 669,706
Trainable params: 669,706
Non-trainable params: 0
_________________________________________________________________
before compiling
after compiling
Train on 60000 samples, validate on 10000 samples
Epoch 1/4

代码在这里:

    print('before compiling')

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

    print('after compiling')

    history = model.fit(x_train, y_train,
                        batch_size=batch_size,
                        epochs=epochs,
                        verbose=1,
                        validation_data=(x_test, y_test))

    print('after training')

这意味着,它在model.fit以某种方式与我的项目完全相同,但它不会引发任何错误。它永远不会打印after training

但是,如果我在容器外尝试相同的代码,但使用相同的virtualenv和相同的实例,它会产生:

Total params: 669,706
Trainable params: 669,706
Non-trainable params: 0
_________________________________________________________________
before compiling
after compiling
Train on 60000 samples, validate on 10000 samples
Epoch 1/4
2018-02-27 10:21:46.917107: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
60000/60000 [==============================] - 11s 179us/step - loss: 0.2501 - acc: 0.9235 - val_loss: 0.1126 - val_acc: 0.9653
Epoch 2/4
60000/60000 [==============================] - 11s 178us/step - loss: 0.1032 - acc: 0.9687 - val_loss: 0.1010 - val_acc: 0.9682
Epoch 3/4
60000/60000 [==============================] - 11s 178us/step - loss: 0.0749 - acc: 0.9774 - val_loss: 0.0823 - val_acc: 0.9762
Epoch 4/4
60000/60000 [==============================] - 11s 179us/step - loss: 0.0622 - acc: 0.9818 - val_loss: 0.0799 - val_acc: 0.9784
after training

这就是容器内应该发生的事情。 (我将时期数减少到4,只是为了知道它是否正在处理合适而不是等待那么久)

model.evaluate也会出现同样的行为。没有错误,但它没有做任何其他事情。

我不知道会发生什么。

python docker tensorflow keras
1个回答
0
投票

我正在关闭这个错误,因为我发现它与docker容器没有关系。我进入了docker容器并在那里执行代码,并且它工作正常。所以,我想这与烧瓶,uwsgi或主管有关。

我从这里尝试了一切:issue 2397debug=Falsegraph as default with tensorflow as well as Keras Backenddaemon in thread to true等等),它仍然没有使用tensorflow作为后端。该项目实际上是在uswgi和主管之外使用烧瓶。

编辑

好吧,我会在这里写下答案,因为它更容易。

问题出在uwsgi上。凯拉斯不知何故在那里工作。

我只是按照指示of this github repo,现在它正在工作。

© www.soinside.com 2019 - 2024. All rights reserved.