Tensorflow fit_generator - 如何正确使用纪元?
Tensorflow fit_generator - how to use epochs correctly?
我正在使用 Tensorflow Hub 开发二进制文本分类器。
x_train = np.array(["Some test text",
"Testing this text",
"This is relevant to my test",
"Cows don't fly",
"One two three",
"some text"])
y_train = np.array([1,1,1,0,0,0])
model = "https://tfhub.dev/google/tf2-preview/gnews-swivel-20dim/1"
hub_layer = hub.KerasLayer(model, output_shape=[20], input_shape=[],
dtype=tf.string, trainable=True)
model = tf.keras.Sequential()
model.add(hub_layer)
model.add(tf.keras.layers.Dense(16, activation='relu', input_shape=[20]))
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))
model.summary()
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
当我使用 fit
命令拟合模型时,我可以将我的纪元设置为我想要的最高值。当我使用fit_generator
方法时,似乎每个数据点只能使用一次。
# Trains as expected
model.fit(x_train, y_train, epochs=100)
# Errors during training with
# 'Your dataset iterator ran out of data; interrupting training.
# Make sure that your iterator can generate at least `steps_per_epoch * epochs`
# batches (in this case, 600 batches).'
model.fit_generator(my_iterator(x_train, y_train), epochs=100, steps_per_epoch=len(x_train))
如何正确设置我的迭代器以便能够使用生成器进行训练?
"The generator is expected to loop over its data indefinitely"。所以需要将我的迭代器定义为:
def my_iterator(x, y):
while True:
for _x, _y in zip(x, y):
yield np.array([_x]), np.array([_y])
我正在使用 Tensorflow Hub 开发二进制文本分类器。
x_train = np.array(["Some test text",
"Testing this text",
"This is relevant to my test",
"Cows don't fly",
"One two three",
"some text"])
y_train = np.array([1,1,1,0,0,0])
model = "https://tfhub.dev/google/tf2-preview/gnews-swivel-20dim/1"
hub_layer = hub.KerasLayer(model, output_shape=[20], input_shape=[],
dtype=tf.string, trainable=True)
model = tf.keras.Sequential()
model.add(hub_layer)
model.add(tf.keras.layers.Dense(16, activation='relu', input_shape=[20]))
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))
model.summary()
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
当我使用 fit
命令拟合模型时,我可以将我的纪元设置为我想要的最高值。当我使用fit_generator
方法时,似乎每个数据点只能使用一次。
# Trains as expected
model.fit(x_train, y_train, epochs=100)
# Errors during training with
# 'Your dataset iterator ran out of data; interrupting training.
# Make sure that your iterator can generate at least `steps_per_epoch * epochs`
# batches (in this case, 600 batches).'
model.fit_generator(my_iterator(x_train, y_train), epochs=100, steps_per_epoch=len(x_train))
如何正确设置我的迭代器以便能够使用生成器进行训练?
"The generator is expected to loop over its data indefinitely"。所以需要将我的迭代器定义为:
def my_iterator(x, y):
while True:
for _x, _y in zip(x, y):
yield np.array([_x]), np.array([_y])