tensor flow 에서 데 이 터 를 불 러 오 는 세 가지 방식 을 자세히 설명 합 니 다.
12024 단어 tensorflow불 러 오기데이터
TF 의 핵심 은 C++로 작 성 된 것 으로,이러한 장점 은 빠르게 작 동 하 는 것 이 며,호출 이 원활 하지 않다 는 단점 이 있다.파 이 썬 은 정반 대 이기 때문에 두 언어의 장점 을 결합 시킨다.계산 과 관련 된 핵심 연산 자 와 실행 프레임 워 크 는 C++로 쓰 여 있 으 며,Python 에 API 를 제공 합 니 다.Python 은 이 API 를 호출 하여 훈련 모델(Graph)을 설계 하고 디자인 된 그래프 를 백 엔 드 에 실행 합 니 다.요컨대 Python 의 역할 은 Design 이 고 C++는 Run 이다.
1.미리 불 러 온 데이터:
import tensorflow as tf
# Graph
x1 = tf.constant([2, 3, 4])
x2 = tf.constant([4, 0, 1])
y = tf.add(x1, x2)
# session --> y
with tf.Session() as sess:
print sess.run(y)
2.python 에서 데 이 터 를 만 들 고 백 엔 드 에 데 이 터 를 먹 입 니 다.
import tensorflow as tf
# Graph
x1 = tf.placeholder(tf.int16)
x2 = tf.placeholder(tf.int16)
y = tf.add(x1, x2)
# Python
li1 = [2, 3, 4]
li2 = [4, 0, 1]
# session --> --> y
with tf.Session() as sess:
print sess.run(y, feed_dict={x1: li1, x2: li2})
설명:여기 서 x1,x2 는 자리 표시 자 일 뿐 구체 적 인 값 이 없습니다.그러면 실행 할 때 어디로 가 야 합 니까?이 럴 때 는 sess.run()의 feed 를 사용 해 야 합 니 다.dict 매개 변 수 는 Python 에서 발생 한 데 이 터 를 백 엔 드 에 먹이 고 y 를 계산 합 니 다.이 두 가지 방안 의 단점:
1.미리 불 러 오기:데 이 터 를 그래프 에 직접 삽입 하고 그래프 를 Session 에 전송 하여 실행 합 니 다.데이터 양 이 비교적 많 을 때 그래프 의 전송 은 효율 적 인 문제 에 부 딪 힐 수 있다.
2.자리 차지 문자 로 데 이 터 를 대체 하고 실행 할 때 데 이 터 를 채 웁 니 다.
앞의 두 가지 방법 은 매우 편리 하지만 대형 데 이 터 를 만 났 을 때 매우 힘 들 고 Feeding 이 라 고 해도 중간 부분의 증가 도 적지 않 은 비용 이다.예 를 들 어 데이터 유형 전환 등 이다.가장 좋 은 방안 은 그래프 에서 파일 을 읽 는 방법 을 정의 하여 TF 가 스스로 파일 에서 데 이 터 를 읽 고 사용 가능 한 샘플 집합 으로 디 코딩 하 는 것 이다.
3.파일 에서 읽 습 니 다.쉽게 말 하면 데이터 읽 기 모듈 의 그림 을 맞 추 는 것 입 니 다.
1.데 이 터 를 준비 하고 세 개의 파일 을 구성 합 니 다.A.csv,B.csv,C.csv
$ echo -e "Alpha1,A1
Alpha2,A2
Alpha3,A3" > A.csv
$ echo -e "Bee1,B1
Bee2,B2
Bee3,B3" > B.csv
$ echo -e "Sea1,C1
Sea2,C2
Sea3,C3" > C.csv
2.단일 리더,단일 샘플
#-*- coding:utf-8 -*-
import tensorflow as tf
# QueueRunner,
filenames = ['A.csv', 'B.csv', 'C.csv']
filename_queue = tf.train.string_input_producer(filenames, shuffle=False)
# Reader
reader = tf.TextLineReader()
key, value = reader.read(filename_queue)
# Decoder
example, label = tf.decode_csv(value, record_defaults=[['null'], ['null']])
#example_batch, label_batch = tf.train.shuffle_batch([example,label], batch_size=1, capacity=200, min_after_dequeue=100, num_threads=2)
# Graph
with tf.Session() as sess:
coord = tf.train.Coordinator() # ,
threads = tf.train.start_queue_runners(coord=coord) # QueueRunner, 。
for i in range(10):
print example.eval(),label.eval()
coord.request_stop()
coord.join(threads)
설명:여 기 는 tf.train.shuffle 을 사용 하지 않 았 습 니 다.batch,생 성 된 샘플 과 label 사이 에 대응 하지 못 하고 순서 가 어 지 럽 습 니 다.생 성 결 과 는 다음 과 같 습 니 다.Alpha1 A2
Alpha3 B1
Bee2 B3
Sea1 C2
Sea3 A1
Alpha2 A3
Bee1 B2
Bee3 C1
Sea2 C3
Alpha1 A2
솔 루 션:tf.train.shuffle 로batch,그러면 생 성 된 결과 가 대응 할 수 있 습 니 다.
#-*- coding:utf-8 -*-
import tensorflow as tf
# QueueRunner,
filenames = ['A.csv', 'B.csv', 'C.csv']
filename_queue = tf.train.string_input_producer(filenames, shuffle=False)
# Reader
reader = tf.TextLineReader()
key, value = reader.read(filename_queue)
# Decoder
example, label = tf.decode_csv(value, record_defaults=[['null'], ['null']])
example_batch, label_batch = tf.train.shuffle_batch([example,label], batch_size=1, capacity=200, min_after_dequeue=100, num_threads=2)
# Graph
with tf.Session() as sess:
coord = tf.train.Coordinator() # ,
threads = tf.train.start_queue_runners(coord=coord) # QueueRunner, 。
for i in range(10):
e_val,l_val = sess.run([example_batch, label_batch])
print e_val,l_val
coord.request_stop()
coord.join(threads)
3.단일 리더,여러 샘플,주로 tf.train.shufflebatch 구현
#-*- coding:utf-8 -*-
import tensorflow as tf
filenames = ['A.csv', 'B.csv', 'C.csv']
filename_queue = tf.train.string_input_producer(filenames, shuffle=False)
reader = tf.TextLineReader()
key, value = reader.read(filename_queue)
example, label = tf.decode_csv(value, record_defaults=[['null'], ['null']])
# tf.train.batch() QueueRunner。
#Decoder , 。
# Reader, , , 。
example_batch, label_batch = tf.train.batch(
[example, label], batch_size=5)
with tf.Session() as sess:
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)
for i in range(10):
e_val,l_val = sess.run([example_batch,label_batch])
print e_val,l_val
coord.request_stop()
coord.join(threads)
설명:아래 의 이런 표기 법,추출 한 batchsize 개 샘플,특징 과 label 사이 도 일치 하지 않 습 니 다.
#-*- coding:utf-8 -*-
import tensorflow as tf
filenames = ['A.csv', 'B.csv', 'C.csv']
filename_queue = tf.train.string_input_producer(filenames, shuffle=False)
reader = tf.TextLineReader()
key, value = reader.read(filename_queue)
example, label = tf.decode_csv(value, record_defaults=[['null'], ['null']])
# tf.train.batch() QueueRunner。
#Decoder , 。
# Reader, , , 。
example_batch, label_batch = tf.train.batch(
[example, label], batch_size=5)
with tf.Session() as sess:
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)
for i in range(10):
print example_batch.eval(), label_batch.eval()
coord.request_stop()
coord.join(threads)
설명:출력 결 과 는 다음 과 같 습 니 다.feature 와 label 사이 에 대응 하지 않 음 을 알 수 있 습 니 다.['Alpha1' 'Alpha2' 'Alpha3' 'Bee1' 'Bee2'] ['B3' 'C1' 'C2' 'C3' 'A1']
['Alpha2' 'Alpha3' 'Bee1' 'Bee2' 'Bee3'] ['C1' 'C2' 'C3' 'A1' 'A2']
['Alpha3' 'Bee1' 'Bee2' 'Bee3' 'Sea1'] ['C2' 'C3' 'A1' 'A2' 'A3']
4.여러 개의 reader,여러 개의 견본
#-*- coding:utf-8 -*-
import tensorflow as tf
filenames = ['A.csv', 'B.csv', 'C.csv']
filename_queue = tf.train.string_input_producer(filenames, shuffle=False)
reader = tf.TextLineReader()
key, value = reader.read(filename_queue)
record_defaults = [['null'], ['null']]
# , reader
example_list = [tf.decode_csv(value, record_defaults=record_defaults)
for _ in range(2)] # Reader 2
# tf.train.batch_join(), reader, 。 Reader 。
example_batch, label_batch = tf.train.batch_join(
example_list, batch_size=5)
with tf.Session() as sess:
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)
for i in range(10):
e_val,l_val = sess.run([example_batch,label_batch])
print e_val,l_val
coord.request_stop()
coord.join(threads)
tf.train.batch 와 tf.train.shufflebatch 함 수 는 단일 Reader 로 읽 지만 다 중 스 레 드 가 가능 합 니 다.tf.train.batch_join 과 tf.train.shufflebatch_join 은 다 중 Reader 읽 기 를 설정 할 수 있 습 니 다.모든 Reader 는 하나의 스 레 드 를 사용 합 니 다.두 가지 방법의 효율 에 대해 서 는 리더 만 있 을 때 두 개의 스 레 드 가 속도 의 한계 에 이 르 렀 다.리 더 를 많이 읽 었 을 때 리 더 는 2 개 로 한계 에 도달 했다.그래서 스 레 드 가 많 을 수록 빠 르 고 심지어 더 많은 스 레 드 가 오히려 효율 을 떨 어 뜨리 는 것 은 아니다.5.교체 제어,epoch 매개 변 수 를 설정 하고 우리 의 견본 이 훈련 할 때 몇 라운드 만 사용 할 수 있 는 지 지정 합 니 다.
#-*- coding:utf-8 -*-
import tensorflow as tf
filenames = ['A.csv', 'B.csv', 'C.csv']
#num_epoch:
filename_queue = tf.train.string_input_producer(filenames, shuffle=False,num_epochs=3)
reader = tf.TextLineReader()
key, value = reader.read(filename_queue)
record_defaults = [['null'], ['null']]
# , reader
example_list = [tf.decode_csv(value, record_defaults=record_defaults)
for _ in range(2)] # Reader 2
# tf.train.batch_join(), reader, 。 Reader 。
example_batch, label_batch = tf.train.batch_join(
example_list, batch_size=1)
#
init_local_op = tf.initialize_local_variables()
with tf.Session() as sess:
sess.run(init_local_op)
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)
try:
while not coord.should_stop():
e_val,l_val = sess.run([example_batch,label_batch])
print e_val,l_val
except tf.errors.OutOfRangeError:
print('Epochs Complete!')
finally:
coord.request_stop()
coord.join(threads)
coord.request_stop()
coord.join(threads)
교체 제어 중 tf.initialize 추가 기억local_variables(),홈 페이지 튜 토리 얼 은 설명 되 지 않 았 지만 초기 화 되 지 않 으 면 실행 이 잘못 되 었 습 니 다.전통 적 인 기계 학습 에 있어 예 를 들 어 분류 문제,[x1 x2 x3]는 feature 이다.2 분류 문제 에 대해 label 은 one-hot 인 코딩 을 거 친 후에[0,1]또는[1,0]이 될 것 이다.일반적으로 csv 파일 에 데 이 터 를 구성 하 는 것 을 고려 합 니 다.한 줄 은 sample 을 대표 합 니 다.그리고 대기 열 방식 으로 데 이 터 를 읽 습 니 다.
설명:이 데이터 에 대해 앞의 세 열 은 feature 를 대표 합 니 다.분류 문제 이기 때문에 뒤의 두 열 은 one-hot 인 코딩 을 통 해 얻 은 label 입 니 다.
이 csv 파일 을 읽 기 위해 대기 열 을 사용 하 는 코드 는 다음 과 같 습 니 다.
#-*- coding:utf-8 -*-
import tensorflow as tf
# QueueRunner,
filenames = ['A.csv']
filename_queue = tf.train.string_input_producer(filenames, shuffle=False)
# Reader
reader = tf.TextLineReader()
key, value = reader.read(filename_queue)
# Decoder
record_defaults = [[1], [1], [1], [1], [1]]
col1, col2, col3, col4, col5 = tf.decode_csv(value,record_defaults=record_defaults)
features = tf.pack([col1, col2, col3])
label = tf.pack([col4,col5])
example_batch, label_batch = tf.train.shuffle_batch([features,label], batch_size=2, capacity=200, min_after_dequeue=100, num_threads=2)
# Graph
with tf.Session() as sess:
coord = tf.train.Coordinator() # ,
threads = tf.train.start_queue_runners(coord=coord) # QueueRunner, 。
for i in range(10):
e_val,l_val = sess.run([example_batch, label_batch])
print e_val,l_val
coord.request_stop()
coord.join(threads)
출력 결 과 는 다음 과 같 습 니 다.설명:
record_defaults = [[1], [1], [1], [1], [1]]
해 석 된 템 플 릿 을 대표 합 니 다.각 견본 은 5 열 이 있 고 데이터 에서 기본적으로','격 리 된 다음 에 해 석 된 기준 은[1]입 니 다.즉,각 열의 수 치 는 모두 정형 으로 해 석 됩 니 다.[1.0]부동 소수점 으로 해석 하고[null]string 형식 으로 해석 합 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Mediapipe를 사용한 맞춤형 인간 포즈 분류OpenCV의 도움으로 Mediapipe를 사용하여 사용자 지정 포즈 분류 만들기 Yoga Pose Dataset을 사용하여 사용자 정의 인간 포즈 분류를 생성하겠습니다. 1. 리포지토리 복제: 데이터세트 다운로드:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.