TensorFlow 실전 디버깅 중 발생한 문제 및 해결 방법 2
4430 단어 TensorFlow
# -*- encoding=utf-8 -*-
from numpy import genfromtxt
import numpy as np
import random
import sys
import csv
import tensorflow as tf
import matplotlib.pyplot as plt
from sklearn import preprocessing
reload(sys)
sys.setdefaultencoding("utf-8")
dataPath = r"./BB.csv"
num_epochs1 = 10
rows = 100
turn = 2000
def read_data(file_queue):
# Reader
reader = tf.TextLineReader(skip_header_lines=1)
key, value = reader.read(file_queue)
# Decoder
#defaults ,CSV M*N , 1*N , , float,[1] [1.0]
defaults = [[''], ['null'], [''], [0.], [0.], [0.], [0.], [0], [""], [0], ['null'], [""]]
# ,
city, origin, destination, origin_lat, origin_lng, destination_lat, destination_lng, \
distance, weature, duration, week_time, create_time = tf.decode_csv(records=value, record_defaults=defaults)
#return tf.stack([SepalLengthCm, SepalWidthCm, PetalLengthCm, PetalWidthCm]), preprocess_op
return distance, duration
def batch_input(filename, num_epochs):
# QueueRunner
file_queue = tf.train.string_input_producer(string_tensor=[filename], num_epochs=10)
example, label = read_data(file_queue)
min_after_dequeue = 100
batch_size = 10
capacity = min_after_dequeue+3*batch_size
example_batch, label_batch = tf.train.shuffle_batch([example, label], batch_size=batch_size, capacity=capacity,
min_after_dequeue=min_after_dequeue)
return example_batch, label_batch
#exampleBatch1, labelBatch1 = batch_input(dataPath, num_epochs=100)
with tf.Session() as sess:
init_op = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
sess.run(init_op)
exampleBatch1, labelBatch1 = batch_input(dataPath, num_epochs=100)
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)
try:
while not coord.should_stop():
example_batch, label_batch = sess.run([exampleBatch1, labelBatch1])
print("example_batch is:")
print(example_batch)
except tf.errors.OutOfRangeError:
print('Done training -- epoch limit reached')
finally:
coord.request_stop()
coord.join(threads)
위의 프로그램이 완성한 기능은 csv 파일의 데이터를 대량으로 얻는 것이지만 실행할 때 다음과 같은 오류가 발생합니다.
File "better_nonlinear_one_input_batch1.py", line 64, in coord.join(threads) File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/coordinator.py", line 389, in join six.reraise(*self._exc_info_to_raise) File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/queue_runner_impl.py", line 238, in _run enqueue_callable() File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 1231, in _single_operation_run target_list_as_strings, status, None) File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/errors_impl.py", line 473, in __exit__ c_api.TF_GetCode(self.status.status))tensorflow.python.framework.errors_impl.FailedPreconditionError: Attempting to use uninitialized value input_producer/limit_epochs/epochs [[Node: input_producer/limit_epochs/CountUpTo = CountUpTo[T=DT_INT64, _class=["loc:@input_producer/limit_epochs/epochs"], limit=10, _device="/job:localhost/replica:0/task:0/device:CPU:0"](input_producer/limit_epochs/epochs)]]
인터넷에서 유사한 오류를 찾아서 얻은 결과는 모두 초기화, 즉 다음 두 줄을 넣어야 한다고 말했다.
init_op = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
sess.run(init_op)
그러나 실제 코드에 이미 이 두 줄 코드가 들어갔기 때문에 문제는 여전히 존재한다.한때 안개가 자욱했는데, 설마 관례에 문제가 있는 건 아니겠지?원인을 조금씩 찾기로 했어요. 여기서 감사해야 돼요.
http://www.it1352.com/586287.html
만약 그것이 제공한 절차가 없다면, 나는 아마도 아직도 애써 모색하고 있을 것이다.이 웹 페이지의 저자도 나와 같은 문제에 부딪혔지만, 그의 프로그램은 상술한 두 문장의 프로그램에 가입한 후 정상적으로 실행되었다.세부사항을 깊이 파고들어 한 마디 한 마디 차이점을 찾아내고 최종적으로 문제를 포지셔닝했다. 위의 원본 프로그램에는 다음과 같은 코드가 있다.
exampleBatch1, labelBatch1 = batch_input(dataPath, num_epochs=100),
위치가 중요합니다. 위에 붙인 원본 프로그램에서
exampleBatch1, labelBatch1 = batch_input(dataPath,num_epochs=100)
with tf.Session() as sess:
위에 오류가 발생하지 않습니다(상기 원본 코드 중 두 개의 example Batch1, label Batch1 =batch_input(data Path,num_epochs=100)의 위치를 참조). 저는 처음에 안에 넣었습니다. 이렇게 해서 이상한 문제가 발생했습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
EMNIST에서 알파벳 필기 인식EMNIST-letters를 배웠습니다. CODE: DEMO: — mbotsu (@mb_otsu) 은 2017년에 NIST가 공개한 데이터세트입니다. EMNIST ByClass: 814,255 characters. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.