tenssor flow画像を裁断してデータを強化します。
3480 ワード
余計なことを言わないで、コードを見てください。
裁断後224 x 224 x 3:
補足知識:Tensorflow画像強化(ImageData Generator)
私たちはより複雑なネットワークを訓練して、私たちのトレーニングデータセットが限られているとき、ネットワークは過当フィットの状態に陥りやすいです。
この問題を解決するための可能な有効な方法は、既存の限られたデータセットを通して、画像処理などの方法(回転、せん断、スケーリング)によって、より多くの類似した多様なデータを得ることである。
データ拡張処理は、より多くの記憶空間を占有しない、すなわちデータ拡張プロセスにおいて、元のデータは修正されず、すべての処理過程はメモリ内で即時に処理される。
注意:
データの増強は必ずしも万能薬ではない(データが多いが)、データはもとのデータのランダム性を高めているが、テストセットやアプリケーションシーンがこのようなランダム性を持っていないなら、それは役に立たなくなり、訓練に必要な時間が増える。
使用方法:
#!/usr/bin/env python
# encoding: utf-8
'''
@author: lele Ye
@contact: [email protected]
@software: pycharm 2018.2
@file: 13mnist.py
@time: 2018/12/17 10:23
@desc:
'''
import tensorflow as tf
import scipy.misc
import matplotlib.pyplot as plt
import random
#
filenames = ['./tianchi.jpg']
#
filename_queue = tf.train.string_input_producer(filenames)
# , , key, value
reader = tf.WholeFileReader()
# Returns the next record (key, value) pair produced by a reader
key, value = reader.read(filename_queue)
images = tf.image.decode_jpeg(value) # tf.image.decode_png(value)
target_width = target_height = 224
#
with tf.Session() as sess:
# Coordinator ,
coord = tf.train.Coordinator()
# graph (queuerunners)
threads = tf.train.start_queue_runners(coord=coord)
height,width,channels = sess.run(tf.shape(images))
offset_height = random.randint(0,height-target_height)
offset_width = random.randint(0,width-target_width)
reshapeimg = tf.image.crop_to_bounding_box(images, offset_height=offset_height, offset_width=offset_width,
target_height=target_height,target_width=target_width)
print(type(reshapeimg)) # <class 'tensorflow.python.framework.ops.Tensor'>
reimg1 = reshapeimg.eval() # reimg1 <class 'numpy.ndarray'>
scipy.misc.imsave('./crop.jpg', reimg1)
plt.imshow(reimg1)
plt.axis("off")
plt.show()
#
coord.request_stop()
#
coord.join(threads)
オリジナル画像480 x 320 x 3:裁断後224 x 224 x 3:
補足知識:Tensorflow画像強化(ImageData Generator)
私たちはより複雑なネットワークを訓練して、私たちのトレーニングデータセットが限られているとき、ネットワークは過当フィットの状態に陥りやすいです。
この問題を解決するための可能な有効な方法は、既存の限られたデータセットを通して、画像処理などの方法(回転、せん断、スケーリング)によって、より多くの類似した多様なデータを得ることである。
データ拡張処理は、より多くの記憶空間を占有しない、すなわちデータ拡張プロセスにおいて、元のデータは修正されず、すべての処理過程はメモリ内で即時に処理される。
注意:
データの増強は必ずしも万能薬ではない(データが多いが)、データはもとのデータのランダム性を高めているが、テストセットやアプリケーションシーンがこのようなランダム性を持っていないなら、それは役に立たなくなり、訓練に必要な時間が増える。
使用方法:
train_datagen = ImageDataGenerator(
rescale=1./255, # 255,[0-255] ->[0,1]
shear_range=0.2, # ( , )
zoom_range=0.2, #
horizontal_flip=True) #
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
'data/train',
target_size=(150, 150),
batch_size=32,
class_mode='binary')
validation_generator = test_datagen.flow_from_directory(
'data/validation',
target_size=(150, 150),
batch_size=32,
class_mode='binary')
model.fit_generator(
train_generator,
steps_per_epoch=2000,
epochs=50,
validation_data=validation_generator,
validation_steps=800)
以上のこのtenssor flow画像を裁断してデータを強化して操作します。つまり、小編集は皆さんに全部の内容を共有しています。参考にしてもらいたいです。皆さんもよろしくお願いします。