私はむしろテンソルフローを初めて使用しており、さまざまな複雑さのモデルを試しています。私は、パッケージの保存機能と復元機能に問題があります。私がチュートリアルを理解している限り、私は訓練されたグラフを復元し、後でいくつかの新しい入力でそれを実行できるはずです。私はちょうどその:テンソルフロー内の可変入力長で訓練したモデルをInvalidArgumentErrorに復元する
InvalidArgumentError(トレースバックについては上記参照)を実行しようとする場合しかし、私は次のエラーを取得する:形状を[-1,10-]が負の寸法を有する [[ノード:プレースホルダ= Placeholderdtype = DT_FLOAT 、形状= [?10]、_device = "/ジョブ:ローカルホスト/レプリカ:0 /タスク:0/CPU:0"]]
メッセージの私の理解は、復元されたグラフが好きではないされていること1つの次元を任意のままにすることができます。これは、入力がどれだけ大きくなるかを事前に知ることができない実際的な場合に必要です。上記のエラーを引き起こす最小限の例としてのコードスニペットを以下に示します。私は個々のテンソルを個別に復元する方法を知っていますが、モデルが複雑になるとかなり早く実用的になりません。私の質問が愚かな場合には、私が得た助けに感謝し、謝罪します。
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()})
テンソルフローの問題かもしれません。セーバーの方法をチェックするか、セーバーを削除してみてください。試してみてください。 – jowett