Я использую языковое моделирование на уровне слова с ванильным rnn, я могу обучить модель, но по некоторым странным причинам я не могу получить любые образцы/прогнозы из модели; вот соответствующая часть кода:Неверное количество измерений: ожидается 0, получено 1 с формой (1,)
train_set_x, train_set_y, voc = load_data(dataset, vocab, vocab_enc) # just load all data as shared variables
index = T.lscalar('index')
x = T.fmatrix('x')
y = T.ivector('y')
n_x = len(vocab)
n_h = 100
n_y = len(vocab)
rnn = Rnn(input=x, input_dim=n_x, hidden_dim=n_h, output_dim=n_y)
cost = rnn.negative_log_likelihood(y)
updates = get_optimizer(optimizer, cost, rnn.params, learning_rate)
train_model = theano.function(
inputs=[index],
outputs=cost,
givens={
x: train_set_x[index],
y: train_set_y[index]
},
updates=updates
)
predict_model = theano.function(
inputs=[index],
outputs=rnn.y,
givens={
x: voc[index]
}
)
sampling_freq = 2
sample_length = 10
n_train_examples = train_set_x.get_value(borrow=True).shape[0]
train_cost = 0.
for i in xrange(n_train_examples):
train_cost += train_model(i)
train_cost /= n_train_examples
if i % sampling_freq == 0:
# sample from the model
seed = randint(0, len(vocab)-1)
idxes = []
for j in xrange(sample_length):
p = predict_model(seed)
seed = p
idxes.append(p)
# sample = ''.join(ix_to_words[ix] for ix in idxes)
# print(sample)
Я получаю ошибку: «TypeError: ('Bad входной аргумент Theano функцию с именем„train.py:94“с индексом 0 (0 основе) », 'Неправильное количество измерений: ожидается 0, получил 1 с формой (1)')»
Теперь это соответствует следующей строке (в predict_model).
givens={ x: voc[index] }
Даже после того, как Я не могу понять, как может быть измерение с неправильным соотношением w курица:
train_set_x has shape: (42, 4, 109)
voc has shape: (109, 1, 109)
И когда я train_set_x [индекс], я получаю (4, 109) который 'х' Тензор типа fmatrix может содержать (это то, что происходит в train_model) но когда я делаю voc [index], я получаю (1, 109), который также является матрицей, но 'x' не может это удержать, почему? !
Любая помощь будет очень признательна.
Спасибо!
Вы правы, выход из прогноза_модели (семени) i.e rnn.y был вектором, а не скаляром. Это было действительно глупо с моей стороны :(, Спасибо! – uyaseen