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

时间:2018-02-27 10:41:20

标签: python docker tensorflow keras

我在一个项目中与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():
       ...

(我必须使用图表,因为我正在使用张量流和多线程,请参阅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出现同样的行为。没有错误,但它没有做任何其他事情。

我不知道会发生什么。

1 个答案:

答案 0 :(得分: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的说明操作,现在它正在运作。