Keras(Tensorflow) - 名称array_ops未定义

时间:2018-02-19 15:46:47

标签: python tensorflow keras

我遇到了Keras / Tensorflow反序列化模型的问题。基本上,这是在文本上实现卷积神经网络,这需要在早期阶段添加维度。错误消息是这样的:

  

文件   " /usr/lib/python3.6/site-packages/tensorflow/python/keras/_impl/keras/backend.py" ;,   第2231行,在expand_dims中NameError:name' array_ops'未定义

导致此错误消息的代码:

import numpy as np
from docopt import docopt
import tensorflow as tf
from vdcnn import utils

if __name__ == '__main__':
    arguments = docopt(__doc__, version='1.0')

    model = tf.keras.models.load_model(arguments["--checkpoint"])
    print(type(model))
    proc = utils.Preprocessor(padding_size=256)
    data, labels, test_data, test_labels = proc.process_document(arguments["--data"])

    for i in range(len(test_data)):
        test_vec = test_data[i]
        prediction = model.predict(x=test_vec[np.newaxis])
        predlabel = utils.labels_in_order[np.argmax(prediction)]
        truthlabel = utils.labels_in_order[np.argmax(test_labels[i])]
        print("Truth: {} \t Predicted: {}".format(truthlabel, predlabel)

调用" expand_dims"的代码在Tensorflow函数周围使用Keras Lambda包装器:

...
inputs = tf.keras.Input(shape=(self.sequence_max_length,), dtype='int32', name='inputs')
embedding = tf.keras.layers.Embedding(self.num_quantized_chars, self.embedding_size, input_length=self.sequence_max_length)(inputs)

embedding = tf.keras.layers.Lambda(tf.expand_dims, arguments={'axis' : -1, 'name' : 'embedding_expanded'})(embedding)

conv0 = tf.keras.layers.Conv2D(filters=64, kernel_size=3, strides=[1, self.embedding_size], padding='same', kernel_initializer='he_normal')(embedding)
conv0 = tf.keras.layers.Activation('relu')(conv0)
...

而且,仅仅是为了踢,它在tensorflow库中引用的行:

from tensorflow.python.ops import array_ops

[two thousand lines of crap]

def expand_dims(x, axis=-1):
  """Adds a 1-sized dimension at index "axis".

  Arguments:
      x: A tensor or variable.
      axis: Position where to add a new axis.

  Returns:
      A tensor with expanded dimensions.
  """
  return array_ops.expand_dims(x, axis)

我使用的是Python 3.6和Tensorflow 1.5,这个错误发生在OSX 10.11.6和RHEL 7上。我尝试过使用tf.keras,tf.keras.backend的各种排列,只是没有tf的keras,所有这些都基本上调用完全相同的代码,尽管有时它会抱怨" gen_array_ops"而不是" array_ops"同样的问题。

有人有任何想法吗?

1 个答案:

答案 0 :(得分:0)

问题是:https://github.com/keras-team/keras/issues/8123#issuecomment-354857044

最重要的是,它需要重新安装所有计算机上的所有内容并直接使用keras而不是tf.keras来获取正确的错误消息,这显然是因为Keras如何使用对象序列化以及Python& #34;回溯"工作