web-dev-qa-db-ja.com

Tensorflowデータセットを使用してマラリアデータセットを分割することはできません

Transfer Learning Tutorial に従っています。ノートブックはCats and Dogsデータセットを使用して正常に実行されますが、マラリアデータセットに変更するとアサーションエラーがスローされます

AssertionError: Unrecognized instruction format: NamedSplit('train')(tfds.percent[0:80])

手動で分割してみました

raw_train = tfds.load("malaria", split="train[:80%]")
raw_test = tfds.load("malaria", split="train[81%:90%]")
raw_validation = tfds.load("malaria", split="train[91%:]")

しかし、これはプロット中にエラーをスローします

image, label = raw_train.take(2)
print(b)
plt.figure()
plt.imshow(a)
TypeError: Image data of dtype object cannot be converted to float
4
Navan Chauhan

@dulo Collinsが正解を投稿しました。これは彼の答えの小さな拡張です。

トラブルシューティング中にこの投稿を見つけましたが、その解決策を実装できませんでした。問題の原因がわからなかったのです。幸いなことに、私はそれを通り抜ける記事を見つけました。この回答は、その記事の問題と解決策の概要です。

AssertionError:認識されない命令形式:NamedSplitはTensorFlow公式チュートリアルのimdbムービー評価例で報告されます

問題

分割データの形式が原因です。エラーは再フォーマット後に解消されました。

SPLIT_WEIGHTS = (8, 1, 1)

splits = tfds.Split.TRAIN.subsplit(weighted=SPLIT_WEIGHTS)

(raw_train, raw_validation, raw_test), metadata = tfds.load('cats_vs_dogs', split=list(splits), with_info=True, as_supervised=True)

get_label_name = metadata.features['label'].int2str

for image, label in raw_train.take(2):
  plt.figure()
  plt.imshow(image)
  plt.title(get_label_name(label))

上のコードは スタンフォードのCS231nコースTensorflowに関するJupyter Notebook からのものです。

エラー

AssertionError:認識されない命令フォーマット:NamedSplit( 'train')(tfds.percent [0:80])

ソリューション

splits = ("train[:80]", "train[:10]", "train[:10]")

(raw_train, raw_validation, raw_test), metadata = tfds.load('cats_vs_dogs', split=splits, with_info=True, as_supervised=True)

get_label_name = metadata.features['label'].int2str

for image, label in raw_train.take(2):
  plt.figure()
  plt.imshow(image)
  plt.title(get_label_name(label))
0

これを使えます。このシンプルなラインは私にとってはうまくいきます。

(cat_train, cat_valid, cat_test), info = tfds.load('cats_vs_dogs', split=['train[:80%]', 'train[80%:90%]', 'train[90%:]'], with_info=True, as_supervised=True)
0
Tanmoy Datta