TensorFlow — классификация с тысячами меток

Я очень новичок в TensorFlow. Я пытался использовать TensorFlow для создания функции, в которой я даю ей вектор с 6 функциями и возвращаю метку.

У меня есть набор обучающих данных в виде 6 функций и 1 метки. Метка находится в первом столбце:

309,3,0,2,4,0,6
309,12,0,2,4,0,6
309,0,4,17,2,0,6
318,0,660,414,58,3,12
311,0,0,414,58,0,2
298,0,53,355,5,0,2
60,16,14,381,30,4,2
312,0,8,8,13,0,3
...

У меня есть индекс для ярлыков, который представляет собой список тысяч и тысяч имен:

309,Joe
318,Joey
311,Bruce
...

Как создать модель и обучить ее с помощью TensorFlow, чтобы она могла предсказывать метку по вектору без первого столбца?

--

Вот что я пробовал:

from __future__ import print_function
import tflearn

name_count = sum(1 for line in open('../../names.csv'))  # this comes out to 24260 

# Load CSV file, indicate that the first column represents labels
from tflearn.data_utils import load_csv
data, labels = load_csv('../../data.csv', target_column=0,
                    categorical_labels=True, n_classes=name_count)


# Build neural network
net = tflearn.input_data(shape=[None, 6])
net = tflearn.fully_connected(net, 32)
net = tflearn.fully_connected(net, 32)
net = tflearn.fully_connected(net, 2, activation='softmax')
net = tflearn.regression(net)

# Define model
model = tflearn.DNN(net)
# Start training (apply gradient descent algorithm)
model.fit(data, labels, n_epoch=10, batch_size=16, show_metric=True)

# Predict 
pred = model.predict([[218,5,124,26,0,3]])  # 326
print("Name:", pred[0][1])

Он основан на https://github.com/tflearn/tflearn/blob/master/tutorials/intro/quickstart.md
Я получаю сообщение об ошибке:

ValueError: Cannot feed value of shape (16, 24260) for Tensor u'TargetsData/Y:0', which has shape '(?, 2)'

24260 — это количество строк в файле names.csv.

Благодарю вас!


person Or Arbel    schedule 23.07.2017    source источник
comment
Что вы уже пробовали? Вы спрашиваете, как работает контролируемое обучение? или как написать код для контролируемого обучения с помощью tensorflow? или вас беспокоит количество классов, которые вы пытаетесь классифицировать? Вы смотрели на иерархический softmax?   -  person Ryan Stout    schedule 23.07.2017
comment
@RyanStout отредактировал, спасибо! Поскольку все примеры контролируемого обучения, которые я видел, имеют только около 2 или 3 меток, я даже не уверен, какой метод мне следует использовать. Но мой вопрос в том, как решить это с помощью кода.   -  person Or Arbel    schedule 23.07.2017


Ответы (1)


net = tflearn.fully_connected(net, 2, activation='softmax')

похоже, что у вас есть 2 выходных класса, но на самом деле у вас есть 24260. 16 — это размер вашего мини-пакета, поэтому у вас есть 16 строк по 24260 столбцов (один из этих 24260 будет 1, остальные будут все 0) .

person Ryan Stout    schedule 23.07.2017