Скрипт пытается использовать функцию (в данном случае np.sin()
) в качестве генератора, предназначенного для последующей передачи в модель для обучения (следовательно, tf.Session()
). К сожалению, я получаю сообщение об ошибке:
"ValueError: generator
дал элемент shape (), где ожидался элемент shape (1,)."
В прошлом я использовал генераторы для извлечения данных из файлов .hdf5, но вместо этого я пытаюсь сгенерировать данные формы волны из функции в вызываемом классе.
Вызов функции генерирования вне tf.data.Dataset.from_generator()
работает как нужно:
next(sine_wave_source())
import numpy as np
import tensorflow as tf
class sine_wave_source:
def __init__(self,frequency = 1,sampling_frequency = 100):
self.fc = frequency
self.Fs = sampling_frequency
self.time_vector = np.arange(0,1,1/self.Fs,dtype = 'float32')
def __call__(self):
for t in self.time_vector:
yield np.sin(2*np.pi*self.fc*t,dtype = 'float32')
data_gen = tf.data.Dataset.from_generator(
sine_wave_source(),
output_types = (tf.float32),
output_shapes = (tf.TensorShape([1])))
data_iterator = data_gen.make_initializable_iterator()
next_sample = data_iterator.get_next()
with tf.Session() as sess:
sess.run(data_iterator.initializer)
for ii in range(0,100):
sample = sess.run([next_sample])
print(sample)