tensorflow 如何在python中逐个标签地导入图像序列?[已关闭]

wh6knrhe  于 2022-12-19  发布在  Python
关注(0)|答案(1)|浏览(142)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
4天前关闭。
Improve this question
假设我的文件夹结构如下-

speaker_id1 
---------->sentence1 
------------------->words_in_sentence1 
--------------------------------------> frame1.jpg 
--------------------------------------> frame2.jpg 
speaker_id2 
----------->.... 
------------------->.....
--------------------------------------> ....

我必须使用每个单词(即类)的图像序列来训练深度学习模型。你能帮我导入帧(即图像序列),使类成为“words_in_sentence”吗?
到目前为止,我已经将包含视频的初始数据集转换为帧,结构如前所述。我可以获得类。甚至可以将帧存储为传统的标记图像。但我想存储特定类的序列。

wfsdck30

wfsdck301#

你可以通过
1.列出保存文件中的索引,以便管理子目录长度。
1.更改子目录格式并使用flow_from_directoryCreate dataflow
示例:使用数据列表索引文件,复杂的子目录结构需要列表索引,以便以后比较引用。

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
: Variables
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
WIDTH = 32
HEIGHT = 32
CHANNEL = 3
train_generator_batch_size = 1

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
: Class / Functions
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
def create_image_generator( ):
    variables = pd.read_excel('F:\\temp\\Python\\word_sentenses.xlsx', index_col=None, header=[0], dtype=str)
    
    for Index, Image, Label in variables.values:
        print( Label )
    
    train_generator = tf.keras.preprocessing.image.ImageDataGenerator(
        rescale=1./255,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True,
        
        validation_split=0.2,
    
    )

    train_image_ds = train_generator.flow_from_dataframe(
        dataframe = variables,
        directory=None,
        x_col= 'Image',
        y_col= 'Label',
        weight_col=None,
        target_size=( WIDTH, HEIGHT ),
        color_mode='rgb',
        classes=['1', '2', '3'],
        class_mode='categorical',           ####
        batch_size=train_generator_batch_size,
        shuffle=True,
        seed=None,
        save_to_dir=None,
        save_prefix='',
        save_format='jpg',
        subset=None,
        interpolation='nearest',
        validate_filenames=True,
    )

    return train_image_ds

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
: Dataset
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
train_image_ds = tf.data.Dataset.from_generator(
    create_image_generator,
    output_types=None,
    output_shapes=None,
    args=None,

    output_signature=(
        tf.TensorSpec(shape=( 1, WIDTH, HEIGHT, CHANNEL ), dtype=tf.float32, name=None), tf.TensorSpec(shape=(1, 3), dtype=tf.float32, name=None),
        ),
    
    name='train_image_ds'
)

train_image_ds = train_image_ds.batch( 1 )

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
: Model Initialize
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
model = tf.keras.models.Sequential([
    tf.keras.layers.InputLayer(input_shape=( 1, WIDTH, HEIGHT, CHANNEL )),
    tf.keras.layers.Normalization(mean=3., variance=2.),
    tf.keras.layers.Normalization(mean=4., variance=6.),
    tf.keras.layers.Conv2D(32, (3, 3), activation='relu'),
    tf.keras.layers.Reshape((30, 30, 32)),
    tf.keras.layers.MaxPooling2D((2, 2)),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Reshape((128, 225)),
    tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(96, return_sequences=True, return_state=False)),
    tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(96)),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(192, activation='relu'),
    tf.keras.layers.Dense(3),
])

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
: Callback
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
class custom_callback(tf.keras.callbacks.Callback):
    def on_epoch_end(self, epoch, logs={}):
        if( logs['accuracy'] >= 0.95 ):
            self.model.stop_training = True
    
custom_callback = custom_callback()

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
: Optimizer
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
optimizer = tf.keras.optimizers.Nadam(
    learning_rate=0.00001, beta_1=0.9, beta_2=0.999, epsilon=1e-07,
    name='Nadam'
)

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
: Loss Fn
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""                               
lossfn = tf.keras.losses.MeanAbsoluteError(
    reduction=tf.keras.losses.Reduction.AUTO,
    name='mean_absolute_error'
)

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
: Model Summary
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
model.compile(optimizer=optimizer, loss=lossfn, metrics=['accuracy'])

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
: Training
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
history = model.fit( train_image_ds, batch_size=100, epochs=10000, callbacks=[custom_callback] )

输出:训练结果、使用自定义类名的类别模式和dataFrame。

Found 54 validated image filenames belonging to 3 classes.
2022-12-13 22:06:10.086853: I tensorflow/stream_executor/cuda/cuda_dnn.cc:368] Loaded cuDNN version 8100
   4340/Unknown - 241s 54ms/step - loss: 0.3350 - accuracy: 0.3145

相关问题