tensorflow - 在 tensorflow 中恢复使用可变输入长度训练的模型导致 InvalidArgumentError

标签 tensorflow restore

我对 tensorflow 比较陌生,目前正在尝试不同复杂度的模型。我对包的保存和恢复功能有疑问。就我对教程的理解而言,我应该能够恢复经过训练的图形,并在以后使用一些新输入运行它。但是,当我尝试这样做时出现以下错误:

InvalidArgumentError (see above for traceback): Shape [-1,10] has negative dimensions [[Node: Placeholder = Placeholderdtype=DT_FLOAT, shape=[?,10], _device="/job:localhost/replica:0/task:0/cpu:0"]]



我对消息的理解是,恢复的图形不喜欢任意保留一维,而这对于我事先不知道我的输入有多大的实际情况是必要的。一个代码片段作为一个最小的例子,产生上面的错误,可以在下面找到。我知道如何单独恢复每个张量,但是当模型变得复杂时,这很快就会变得不切实际。我很感谢我得到的任何帮助,如果我的问题很愚蠢,我深表歉意。
import numpy as np
import tensorflow as tf

def generate_random_input():
    alist = []
    for _ in range(10):
        alist.append(np.random.uniform(-1, 1, 100))
    return np.array(alist).T
def generate_random_target():
    return np.random.uniform(-1, 1, 100)

x = tf.placeholder('float', [None, 10])
y = tf.placeholder('float')

# the model 
w1 = tf.get_variable('w1', [10, 1], dtype=tf.float32, initializer=tf.contrib.layers.xavier_initializer(seed=1))
b1 = tf.get_variable('b1', [1], dtype=tf.float32, initializer=tf.contrib.layers.xavier_initializer(seed=1))

result = tf.add(tf.matmul(x, w1), b1, name='result')

loss = tf.reduce_mean(tf.losses.mean_squared_error(predictions=result, labels=y))
optimizer = tf.train.AdamOptimizer(0.03).minimize(loss)
saver = tf.train.Saver()
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    sess.run([optimizer, loss], feed_dict={x: generate_random_input(), y: generate_random_target()})
    saver.save(sess, 'file_name')

# now load the model in another session:
sess2 = tf.Session()
saver = tf.train.import_meta_graph('file_name.meta')
saver.restore(sess2, tf.train.latest_checkpoint('./'))
graph = tf.get_default_graph()
pred = graph.get_operation_by_name('result')
test_result = sess2.run(pred, feed_dict={x: generate_random_input()})

最佳答案

在最后一行中,您不使用数据 feed_dict label_palceholder。所以在占位符中,除了批量大小之外,[-1] 维度仍然是 -1。这就是原因。

关于tensorflow - 在 tensorflow 中恢复使用可变输入长度训练的模型导致 InvalidArgumentError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44930754/

相关文章:

Tensorflow (tfjs) - 保存经过训练的模型

python - 使用 pip 安装 TensorFlow 时出错

python - google colab 在此过程中设置了 '^C'

java - 应用引擎 : missing indexes after restoring backup

c# - 当 .bak 文件中有多个备份点时使用 SMO 还原类

python - ValueError : Cannot feed value of shape (64, ) 对于张量 'x:0' ,其形状为 '(?, 100, 100, 3)'

tensorflow - 跨 session 使用恢复的变量会出现 "uninitialized value"错误

mysql - 使用 sqldump 生成的 sql 文件恢复 mariadb 抛出错误代码 22

java - 是否有用于执行备份和还原的 java 库 ".jar"

backup - 我可以在 cloud9-ide 中恢复删除的文件吗?