我对keras/tensorflow进行了疑问的模型有问题。基本上,这是文本上卷积神经网络的实现,这需要在早期阶段添加一个维度。错误消息是:
文件 "/usr/lib/python3.6/site-packages/tensorflow/python/keras/_impl/keras/backend.py", 第2231行,在Expand_dims nameerror中:名称'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 libs中引用的行:
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上发生。所有这些基本上都称为完全相同的代码,尽管有时它会抱怨" gen_array_ops"而不是具有相同问题的" array_ops"。
有人有任何想法吗?
问题是:https://github.com/keras-team/keras/keras/issues/8123#issuecomment-354857044
最重要的是,它需要重新安装所有机器上的所有机器,并直接使用keras
而不是tf.keras
来获取正确的错误消息,这显然是因为Keras如何使用对象序列化和Python" Trackbacks"工作方式。