Python TensorFlow:从3D CNN的numpy阵列获取输入批次
我有3D图像(tiff)数据和文件夹中的每个卷。我想读取数据并制作卷积网络的批量张量。我可以读取numpy数组的数据,但我不知道如何为CNN批量输入张量。这是我的密码Python TensorFlow:从3D CNN的numpy阵列获取输入批次,python,numpy,tensorflow,keras,Python,Numpy,Tensorflow,Keras,我有3D图像(tiff)数据和文件夹中的每个卷。我想读取数据并制作卷积网络的批量张量。我可以读取numpy数组的数据,但我不知道如何为CNN批量输入张量。这是我的密码 import os import tensorflow as tf import numpy as np from skimage import io from matplotlib import pyplot as plt from pathlib import Path data_dir = 'C:/Users/myname/
import os
import tensorflow as tf
import numpy as np
from skimage import io
from matplotlib import pyplot as plt
from pathlib import Path
data_dir = 'C:/Users/myname/Documents/Projects/Segmentation/DeepLearning/L-net/data/'
data_folders = os.listdir(data_dir)
train_input = []
train_output = []
test_input = []
test_output = []
for idx, folder in enumerate(data_folders):
im = io.imread(data_dir+folder+'/f0.tiff')
im = im/im.max()
train_input.append(tf.convert_to_tensor(im, dtype=tf.float32))
im = io.imread(data_dir+folder+'/g0.tiff')
im = im/im.max()
train_output.append(tf.convert_to_tensor(im, dtype=tf.float32))
因为我在CNN上使用3D过滤器,所以输入应该是5D tesnor。有人能帮我吗?谢谢。使用您的方法,您必须将所有数据一次加载到内存中,并且还必须处理所有维度。我建议使用Keras
flow\u目录
和生成器
。Keras有一个ImageDataGenerator
类,该类允许用户从目录中执行图像采集,将所有图像更改为您想要的任何大小,将它们洗牌。您可以在他们的网站上找到文档
下载列车数据集和测试数据集,将其解压缩到名为“列车”和“测试”的两个不同文件夹中。列车文件夹应包含“n”个文件夹,每个文件夹包含各自类别的图像。例如,在Dog vs Cats数据集中,train文件夹应该有两个文件夹,即“Dog”和“Cats”,其中包含各自的图像
这是一个关于如何为模型输入创建数据集的示例:
train_generator = train_datagen.flow_from_directory(
directory=r"C:/Users/myname/Documents/Projects/Segmentation/DeepLearning/L-net/data/",
target_size=(224, 224), # the size of your input images
color_mode="rgb", # could be grayscale or rgb
batch_size=32, # Number of images in each batsh
class_mode="categorical",
shuffle=True, # Whether to shuffle the images or not
seed=42 # Random seed for applying random image augmentation
)
您可以执行如下训练:
STEP_SIZE_TRAIN=train_generator.n//train_generator.batch_size
STEP_SIZE_VALID=valid_generator.n//valid_generator.batch_size
model.fit_generator(generator=train_generator,
steps_per_epoch=STEP_SIZE_TRAIN,
validation_data=valid_generator,
validation_steps=STEP_SIZE_VALID,
epochs=10
)
使用这种方法,您必须一次将所有数据加载到内存中,还必须处理所有维度。我建议使用Keras
flow\u目录
和生成器
。Keras有一个ImageDataGenerator
类,该类允许用户从目录中执行图像采集,将所有图像更改为您想要的任何大小,将它们洗牌。您可以在他们的网站上找到文档
下载列车数据集和测试数据集,将其解压缩到名为“列车”和“测试”的两个不同文件夹中。列车文件夹应包含“n”个文件夹,每个文件夹包含各自类别的图像。例如,在Dog vs Cats数据集中,train文件夹应该有两个文件夹,即“Dog”和“Cats”,其中包含各自的图像
这是一个关于如何为模型输入创建数据集的示例:
train_generator = train_datagen.flow_from_directory(
directory=r"C:/Users/myname/Documents/Projects/Segmentation/DeepLearning/L-net/data/",
target_size=(224, 224), # the size of your input images
color_mode="rgb", # could be grayscale or rgb
batch_size=32, # Number of images in each batsh
class_mode="categorical",
shuffle=True, # Whether to shuffle the images or not
seed=42 # Random seed for applying random image augmentation
)
您可以执行如下训练:
STEP_SIZE_TRAIN=train_generator.n//train_generator.batch_size
STEP_SIZE_VALID=valid_generator.n//valid_generator.batch_size
model.fit_generator(generator=train_generator,
steps_per_epoch=STEP_SIZE_TRAIN,
validation_data=valid_generator,
validation_steps=STEP_SIZE_VALID,
epochs=10
)
您可能只需要4D作为输入。在第一个卷积层之后,它将变为5D。对于3到4 D转换,堆栈图像或使用TF.ExpExtIdim每批使用一个图像。如果你用<代码> IVIIO 读取3D卷,考虑使用<代码> Value而不是<代码> imRead <代码>,你可能只需要4D作为输入。在第一个卷积层之后,它将变为5D。对于3到4 D转换,堆栈图像或使用TF.ExpExtIdim每批使用一个图像。如果您使用“代码> IMAIOO < /代码>读取3D卷,请考虑使用<代码> Value,而不是<代码> imRead < /Cord>