Согласно вашему коду:
String[] name = {"tom", "dick", "harry"};
for(int i = 0; i<=name.length; i++) {
System.out.print(name[i] +'\n');
}
Если вы проверите System.out.print (name.length),
, вы получите 3;
, что означает, что длина вашего имени равна 3
, ваш цикл работает от 0 до 3, который должен работать либо от «0 до 2», либо от «1 до 3»
Ответ
String[] name = {"tom", "dick", "harry"};
for(int i = 0; i<name.length; i++) {
System.out.print(name[i] +'\n');
}
dict
/ array
ошибка при бросании Слишком много кода и зависимостей для воспроизведения вашей проблемы. Мне кажется, что ваша ошибка может исходить из вашей функции parser(record)
, которая возвращает ваши изображения, завернутые в dict
(c.f. {'image': image}
, в то время как это не относится к вашему label
). Так как epoch_x
будет содержать элементы dict
, Tensorflow (и numpy) не сможет преобразовать их в ожидаемый тип данных (тензор tf.float32
, определение cf place place x
), связанная с ошибкой.
Короче говоря, попробуйте заменить return {'image': image}, label
на return image, label
в вашем парсере.
feed_dict
Как-то эта проблема сначала ускользнула от меня. Учитывая ваш входной конвейер на основе Tensorflow-Dataset, вы не должны использовать placeholder
/ feed_dict
. Последние предназначены для передачи ваших данных на CPU в Tensorflow (предположительно на GPU). Это дублирование / преобразование входных данных, выполненных с помощью feed_dict
, является значительным издержками, следовательно, разработка API-интерфейса Densetet Tensorflow, который замыкает все это путем чтения и преобразования ваших данных параллельно фактическим графическим прогонам. Другими словами, ваш epoch_x, epoch_y
не должен быть подан в Tensorflow; они уже являются частью своего графика.
В принципе, ваш конвейер должен выглядеть примерно так:
train_dataset = read_image_dataset_tfrecordfile(my_filenames)
train_dataset = train_dataset.repeat() # if you want to loop indefinitely
train_iterator = train_dataset.make_one_shot_iterator()
x, y = train_iterator.get_next()
# x, y will represent your data batches, fed with the next ones every time
# they are called.
# So you just use them directly instead of placeholders:
prediction = cnn(x)
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(
logits=prediction, labels=y))
optimizer = tf.train.AdadeltaOptimizer().minimize(cost)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for epoch in xrange(num_epochs):
epoch_loss = 0
for _ in xrange(int(1020/batch_size)):
_, c = sess.run([optimizer, cost])
# ...
OutOfRangeError
). См. Раздел документации о том, как с этим бороться. Если вы хотите выполнить цикл несколько раз по вашему набору данных, вы также можете использоватьdataset.repeat()
. – Aldream 13 July 2018 в 13:44