Keras的fit_generator()模型方法需要一个生成形状元组(输入,目标)的生成器,其中两个元素都是NumPy数组.文档似乎暗示如果我只是将Dataset迭代器包装在生成器中,并确保将Tensors转换为NumPy数组,我应该好好去.但是,这段代码给了我一个错误:
import numpy as np
import os
import keras.backend as K
from keras.layers import Dense, Input
from keras.models import Model
import tensorflow as tf
from tensorflow.contrib.data import Dataset
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
with tf.Session() as sess:
def create_data_generator():
dat1 = np.arange(4).reshape(-1, 1)
ds1 = Dataset.from_tensor_slices(dat1).repeat()
dat2 = np.arange(5, 9).reshape(-1, 1)
ds2 = Dataset.from_tensor_slices(dat2).repeat()
ds = Dataset.zip((ds1, ds2)).batch(4)
iterator = ds.make_one_shot_iterator()
while True:
next_val = iterator.get_next()
yield sess.run(next_val)
datagen = create_data_generator()
input_vals = Input(shape=(1,))
output …Run Code Online (Sandbox Code Playgroud) 我想使用 numpy 数组作为输入数据训练卷积神经网络(使用 Tensorflow 1.13 版中的 tf.keras)。训练数据(我目前存储在一个 > 30GB 的“.npz”文件中)不能一次全部放入 RAM。将大型数据集保存和加载到神经网络中进行训练的最佳方法是什么?由于我没有设法找到这个(肯定无处不在?)问题的好答案,我希望在这里听到一个。非常感谢您提供任何帮助!
类似的问题似乎已经被问过很多次了(例如training-classifier-from-tfrecords-in-tensorflow、tensorflow-synchronize-readings-from-tfrecord、how-to-load-data-parallelly-in-tensorflow)但有几个岁,通常不包含决定性的答案。
我目前的理解是使用 TFRecord 文件是解决这个问题的好方法。到目前为止,我发现的最有前途的教程解释了如何在 keras 中使用 TFRecord 文件是medium.com。其他有用的来源是machinelearninguru.com和medium.com_source2和来源therin。
官方 tensorflow 文档和教程(关于tf.data.Dataset、导入数据、tf_records等)对我没有帮助。特别是,即使没有修改,那里给出的几个例子对我也不起作用。
我假设 TFRecords 是解决我的问题的好方法,但我很难使用它们。这是我根据教程medium.com制作的示例。我尽可能地精简了代码。
# python 3.6, tensorflow 1.13.
# Adapted from https://medium.com/@moritzkrger/speeding-up-keras-with-tfrecord-datasets-5464f9836c36
import tensorflow as tf
import numpy as np
from tensorflow.python import keras as keras
# Helper functions (see also https://www.tensorflow.org/tutorials/load_data/tf_records) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 TensorFlow 2.0 设置图像识别 CNN。为了能够分析我的图像增强,我想在张量板中查看我输入网络的图像。
不幸的是,我不知道如何使用 TensorFlow 2.0 和 Keras 来做到这一点。我也没有真正找到这方面的文档。
为简单起见,我展示了一个 MNIST 示例的代码。我将如何在此处添加图像摘要?
import tensorflow as tf
(x_train, y_train), _ = tf.keras.datasets.mnist.load_data()
def scale(image, label):
return tf.cast(image, tf.float32) / 255.0, label
def augment(image, label):
return image, label # do nothing atm
dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train))
dataset = dataset.map(scale).map(augment).batch(32)
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(dataset, epochs=5, callbacks=[tf.keras.callbacks.TensorBoard(log_dir='D:\\tmp\\test')])
Run Code Online (Sandbox Code Playgroud)