【问题标题】:Tensorflow v1 The name 'features:0' refers to a Tensor which does not existTensorflow v1 名称 'features:0' 指的是不存在的张量
【发布时间】:2021-03-26 16:39:59
【问题描述】:

我使用的是 TF 1.15,并定义了一个图表

g = tf.Graph()
with g.as_default():
    # Graph Inputs
    features = tf.placeholder(dtype=tf.float32,
                              shape=[None, 2], name='features')
    targets = tf.placeholder(dtype=tf.float32,
                             shape=[None, 1], name='targets')

    # Model Parameters
    weights = tf.Variable(tf.zeros(shape=[2, 1],
                                   dtype=tf.float32), name='weights')
    bias = tf.Variable([[0.]], dtype=tf.float32, name='bias')

    # Forward Pass
    linear = tf.add(tf.matmul(features, weights), bias, name='linear')
    ones = tf.ones(shape=tf.shape(linear))
    zeros = tf.zeros(shape=tf.shape(linear))
    prediction = tf.where(condition=tf.less(linear, 0.),
                          x=zeros,
                          y=ones,
                          name='prediction')

    # Backward Pass
    errors = targets - prediction
    weight_update = tf.assign_add(weights,
                                  tf.reshape(errors * features, (2, 1)),
                                  name='weight_update')
    bias_update = tf.assign_add(bias, errors,
                                name='bias_update')

    train = tf.group(weight_update, bias_update, name='train')

    saver = tf.train.Saver(name='saver')

并使用保存它

inputs = dict([(features.name, features)])
outputs = dict([(prediction.name, prediction)])
tf.saved_model.simple_save(sess, "my_path", inputs, outputs)

我可以使用saved_model_cli查看模型,以下是其中的一部分

signature_def['serving_default']:
  The given SavedModel SignatureDef contains the following input(s):
    inputs['features:0'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, 2)
        name: features:0

但是当我使用 TF2 tf.keras.model.load_model("my_path") 时会引发错误 KeyError: "The name 'features:0' refers to a Tensor which does not exist. The operation, 'features', does not exist in the graph.",使用 java api 会引发类似的错误。

如何解决?


以下是训练模型的代码

import numpy as np
x_train, y_train = np.array([[1,2],[3,4],[1,3]]), np.array([1,2,1])
x_train.shape, y_train.shape
with tf.Session(graph=g) as sess:
    sess.run(tf.global_variables_initializer())

    for epoch in range(5):
        for example, target in zip(x_train, y_train):
            feed_dict = {'features:0': example.reshape(-1, 2),
                         'targets:0': target.reshape(-1, 1)}
            _ = sess.run(['train'], feed_dict=feed_dict)

    w, b = sess.run(['weights:0', 'bias:0'])
    print('Model parameters:\n')
    print('Weights:\n', w)
    print('Bias:', b)

    saver.save(sess, save_path='perceptron')

    pred = sess.run('prediction:0', feed_dict={features: x_train})
    print(pred, sess)

并使用

for op in g.get_operations():
    print(op.name)

可以看到features被打印出来了。

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    将保存代码放入with Session...后问题解决了。

    
    
    g = tf.Graph()
    with g.as_default():
        # Graph Inputs
        features = tf.placeholder(dtype=tf.float32,
                                  shape=[None, 2], name='features')
        targets = tf.placeholder(dtype=tf.float32,
                                 shape=[None, 1], name='targets')
    
        # Model Parameters
        weights = tf.Variable(tf.zeros(shape=[2, 1],
                                       dtype=tf.float32), name='weights')
        bias = tf.Variable([[0.]], dtype=tf.float32, name='bias')
    
        # Forward Pass
        linear = tf.add(tf.matmul(features, weights), bias, name='linear')
        ones = tf.ones(shape=tf.shape(linear))
        zeros = tf.zeros(shape=tf.shape(linear))
        prediction = tf.where(condition=tf.less(linear, 0.),
                              x=zeros,
                              y=ones,
                              name='prediction')
    
        # Backward Pass
        errors = targets - prediction
        weight_update = tf.assign_add(weights,
                                      tf.reshape(errors * features, (2, 1)),
                                      name='weight_update')
        bias_update = tf.assign_add(bias, errors,
                                    name='bias_update')
    
        train = tf.group(weight_update, bias_update, name='train')
    
        saver = tf.train.Saver(name='saver')
    
        inputs = dict([(features.name, features)])
        outputs = dict([(prediction.name, prediction)])
        tf.saved_model.simple_save(sess, "my_path", inputs, outputs)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-21
      • 2018-05-03
      • 1970-01-01
      • 2019-03-18
      • 2018-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多