ValueError: too many dimensions ‘str‘
20101 단어 구덩이 밟 기 전용 칼럼python딥 러 닝
import torch
import torch.nn as nn
import torch.utils.data as Data
from torchtext import data
if __name__ == "__main__":
mytokenize = lambda x : x.split() # str -> list[str]
#
TEXT = data.Field(
sequential=True, #
tokenize=mytokenize, #
include_lengths=True,
use_vocab=True, #
batch_first=True, #
fix_length=200 #
)
LABEL =data.Field(
sequential=True,
use_vocab=False,
pad_token=None,
unk_token=None
)
#
train_test_fields = [
("text", TEXT),
("label", LABEL)
]
#
traindata, testdata = data.TabularDataset.splits(
path="./data", format="csv", #
train="imdb_train.csv", test="imdb_test.csv",
fields=train_test_fields,
skip_header=True
)
ex0 = traindata.examples[0]
print(ex0.label)
train_data, val_data = traindata.split(split_ratio=0.7)
#
TEXT.build_vocab(train_data, max_size=20000)
LABEL.build_vocab(train_data)
# 10
print(TEXT.vocab.freqs.most_common(n=10))
print(TEXT.vocab.itos[:10])
BATCH_SIZE = 32
#
train_iter = data.BucketIterator(train_data, batch_size=BATCH_SIZE)
val_iter = data.BucketIterator(val_data, batch_size=BATCH_SIZE)
test_iter = data.BucketIterator(testdata, batch_size=BATCH_SIZE)
for batch in train_iter:
break
print("data's label", batch.label)
print("shape of data", batch.text[0].shape)
print("number of data", len(batch.text[1]))
잘못 을 보고 하 다.이 오 류 는 tensor 대상 의 생 성 으로 거 슬러 올 라 갈 수 있다.결론 은 split 가 파일 을 읽 을 때 탭 은[1]과 같은 str 목록 으로 읽 었 지만,어 표를 만 들 때[1]과 같은 숫자 목록 이 필요 하 다 는 것 이다.게다가 다른 블 로그 에서 쓴 이 오류 가 발생 할 수 있 는 이 유 는 일부 데이터 가 디지털 형식 이지 만 str 대상 의 형식 으로 torch.tensor 에 전송 되 어 변환 을 기억 하기 때 문 입 니 다.
해결 방법
사전 처리 대상 LABEL 을 정의 할 때 추가 분사 함 수 를 추가 합 니 다.이것 은 수 정 된 것 입 니 다.
import torch
import torch.nn as nn
import torch.utils.data as Data
from torchtext import data
if __name__ == "__main__":
mytokenize = lambda x : x.split() # str -> list[str]
labeltokenize = lambda x : [int(x[0])] # [str] -> [int]
#
TEXT = data.Field(
sequential=True, #
tokenize=mytokenize, #
include_lengths=True,
use_vocab=True, #
batch_first=True, #
fix_length=200 #
)
LABEL =data.Field(
sequential=True,
use_vocab=False,
dtype=torch.int64,
tokenize=labeltokenize,
pad_token=None,
unk_token=None
)
#
train_test_fields = [
("text", TEXT),
("label", LABEL)
]
#
traindata, testdata = data.TabularDataset.splits(
path="./data", format="csv", #
train="imdb_train.csv", test="imdb_test.csv",
fields=train_test_fields,
skip_header=True
)
ex0 = traindata.examples[0]
print(ex0.label)
train_data, val_data = traindata.split(split_ratio=0.7)
#
TEXT.build_vocab(train_data, max_size=20000)
LABEL.build_vocab(train_data)
# 10
print(TEXT.vocab.freqs.most_common(n=10))
print(TEXT.vocab.itos[:10])
BATCH_SIZE = 32
#
train_iter = data.BucketIterator(train_data, batch_size=BATCH_SIZE)
val_iter = data.BucketIterator(val_data, batch_size=BATCH_SIZE)
test_iter = data.BucketIterator(testdata, batch_size=BATCH_SIZE)
for batch in train_iter:
break
print("data's label", batch.label)
print("shape of data", batch.text[0].shape)
print("number of data", len(batch.text[1]))
출력:
[1]
[('movie', 29836), ('film', 26802), ('one', 17978), ('like', 13816), ('good', 10270), ('even', 8722), ('would', 8564), ('time', 8433), ('really', 8220), ('story', 8185)]
['', '', 'movie', 'film', 'one', 'like', 'good', 'even', 'would', 'time']
data's label tensor([[1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0,
0, 0, 1, 0, 0, 0, 0, 1]])
shape of data torch.Size([32, 200])
number of data 32
done(`・ω・´)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
파이썬을 사용하여 10진수를 bin, 8진수 및 16진수 형식으로 변환하는 방법은 무엇입니까?텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.