<jupyter_start><jupyter_text>画像ファイルを Keras / Tensorflow で読み込める形式に変換して保存する 概要このノートブックでは，SageMaker 上で画像ファイルを読み込んで，学習ジョブに適した形に変換する 2 つの例を説明します．- numpy の ndarray 形式に変換して保存- tfrecords に変換して保存  セットアップ<jupyter_code># 画像を扱うモジュールである PIL をインストール
!pip install --upgrade pip && pip install pillow
import glob
import os
import re
import numpy as np
from PIL import Image
import tensorflow as tf<jupyter_output><empty_output><jupyter_text>データ準備png 形式の MNIST データをダウンロードする<jupyter_code>!sudo rm -r data &&\
mkdir -p data &&\
cd data &&\
git clone https://github.com/myleott/mnist_png.git &&\
tar zxf mnist_png/mnist_png.tar.gz<jupyter_output><empty_output><jupyter_text>numpy 形式で保存<jupyter_code># 画像データを ndarray にして格納するための配列の定義
x_train = np.empty((0, 28, 28), int)
y_train = []<jupyter_output><empty_output><jupyter_text>ファイルからデータを読み込んで ndarray に格納する．ここでは，データ量を間引くために，画像ファイルのうち "11" が頭につく png ファイルだけを抜き出して，訓練データとして使うことにしている．<jupyter_code>r = re.compile('.*(\d+)\/.*')
file_pathes = glob.glob('data/mnist_png/training/*/11*')

for file_path in file_pathes:
    image = Image.open(file_path)
    image_array = np.asarray(image)
    x_train = np.append(x_train, [image_array], axis=0)
    m = r.search(file_path)
    y_train.append(m.group(1))
# 結果の保存
np.savez('train_data', image=x_train, label=y_train)<jupyter_output><empty_output><jupyter_text>tfrecords 形式で保存Tensorflow で効率的に読みだすための tfrecords 形式に変換する場合，下記のような形でシリアライズを行う．<jupyter_code>def convert_to(images, labels, name):
    """Converts a dataset to tfrecords."""
    num_examples = len(labels)

    if images.shape[0] != num_examples:
        raise ValueError('Images size %d does not match label size %d.' %
                         (images.shape[0], num_examples))
    rows = images.shape[1]
    cols = images.shape[2]

    filename = os.path.join(name + '.tfrecords')
    print('Writing', filename)
    writer = tf.python_io.TFRecordWriter(filename)
    for index in range(num_examples):
        image_raw = images[index].tostring()
        example = tf.train.Example(features=tf.train.Features(feature={
            'height': tf.train.Feature(int64_list=tf.train.Int64List(value=[rows])),
            'width': tf.train.Feature(int64_list=tf.train.Int64List(value=[cols])),
            'label': tf.train.Feature(int64_list=tf.train.Int64List(value=[int(labels[index])])),
            'image_raw': tf.train.Feature(bytes_list=tf.train.BytesList(value=[image_raw]))}))
        writer.write(example.SerializeToString())
    writer.close()
convert_to(x_train, y_train, 'train_data')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1306394664574343, 'fraction_numerical': 0.010984699882306787, 'mean_word_length': 4.957943925233645, 'pattern_counts': {'":': 0, '<': 21, '<?xml version=': 0, '>': 21, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '652133', 'license': 'MIT', 'n_tokens_mistral': 1153, 'n_tokens_neox': 1120, 'n_words': 160, 'path': 'tips/convert_images/convert_images.ipynb', 'repo_name': 'smrmkt/sagemaker-notebooks', 'size': '2549'}