質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

1384閲覧

ロジットと訓練データとの間のクロスエントロピーを最小にするために、KingmaおよびBaのAdamアルゴリズムを使用する訓練ステップを定義する。 最後に、単純な全体的なパーセント精度測定を定義

退会済みユーザー

退会済みユーザー

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2019/03/03 01:30

エラー内容

ロジットと訓練データとの間のクロスエントロピーを最小にするために、KingmaおよびBaのAdamアルゴリズムを使用する訓練ステップを定義する。 最後に、単純な全体的なパーセント精度測定を定義する、ということをするためにコードを書いた(以下の該当ソースコード参照)のですが、怒られて以下のようなメッセージがきました。

書いているコード

Python

1# 認証(成功) 2!pip install earthengine-api 3!earthengine authenticate 4 5#ライブラリのインポート(成功) 6import ee 7from IPython import display 8import math 9from matplotlib import pyplot 10import numpy 11from osgeo import gdal 12import tempfile 13import tensorflow as tf 14import urllib 15import zipfile 16 17#Earth Engineクライアントの初期化(成功) 18ee.Initialize() 19 20# 対応するFmaskデータと共にLandsatイメージのDL(成功) 21input_image = ee.Image('LANDSAT/LT5_L1T_TOA_FMASK/LT50100551998003CPE00') 22 23#Earth Engine画像のサムネイルを簡単に印刷できるようにするためのヘルパー関数を定義(成功) 24def print_image(image): 25 display.display(display.Image(ee.data.getThumbnail({ 26 'image': image.serialize(), 27 'dimensions': '360', 28 }))) 29 30# ヘルパー関数を定義して画像とデータを視覚化(成功) 31print_image(input_image.visualize( 32 bands=['B3', 'B2', 'B1'], 33 min=0, 34 max=0.3, 35)) 36print_image(input_image.visualize( 37 bands=['fmask'], 38 min=0, 39 max=4, 40 palette=['808080', '0000C0', '404040', '00FFFF', 'FFFFFF'], 41)) 42 43# Earth Engineから生データを numpy配列としてダウンロードするためのヘルパー関数をいくつか定義(成功) 44def download_tif(image, scale): 45 url = ee.data.makeDownloadUrl(ee.data.getDownloadId({ 46 'image': image.serialize(), 47 'scale': '%d' % scale, 48 'filePerBand': 'false', 49 'name': 'data', 50 })) 51 local_zip, headers = urllib.urlretrieve(url) 52 with zipfile.ZipFile(local_zip) as local_zipfile: 53 return local_zipfile.extract('data.tif', tempfile.mkdtemp()) 54 55def load_image(image, scale): 56 local_tif_filename = download_tif(image, scale) 57 dataset = gdal.Open(local_tif_filename, gdal.GA_ReadOnly) 58 bands = [dataset.GetRasterBand(i + 1).ReadAsArray() for i in range(dataset.RasterCount)] 59 return numpy.stack(bands, 2) 60 61# 有効なデータバンドを含むEarth Engineからのデータを numpy配列としてロードするためにこの関数を使用する、 またFmaskバンドをバイナリクラウドラベルに変換します(すなわち fmask = 4)(成功) 62mask = input_image.mask().reduce('min') 63data = load_image(input_image.addBands(mask), scale=240) 64data[:,:,7] = numpy.equal(data[:,:,7], 4) 65 66# pypltを用いてNRG偽色画像を表示(成功) 67pyplot.imshow(numpy.clip(data[:,:,[3,2,1]] * 3, 0, 1)) 68pyplot.show() 69 70# 入力データを前処理。正規化のためのトレーニングデータのバンドごとの平均と標準偏差を計算する(成功) 71HOLDOUT_FRACTION = 0.1 72 73# ピクセルの単一ベクトルに変形します。(成功) 74data_vector = data.reshape([data.shape[0] * data.shape[1], data.shape[2]]) 75 76# 有効なデータのみを選択してシャッフルしてください。(成功) 77valid_data = data_vector[numpy.equal(data_vector[:,8], 1)] 78numpy.random.shuffle(valid_data) 79 80# 検証のためにラベル付きデータの一部を差し出します。(成功) 81training_size = int(valid_data.shape[0] * (1 - HOLDOUT_FRACTION)) 82training_data = valid_data[0:training_size,:] 83validation_data = valid_data[training_size:-1,:] 84 85# 入力バンドのバンドごとの平均と標準偏差を計算します。(成功) 86data_mean = training_data[:,0:7].mean(0) 87data_std = training_data[:,0:7].std(0) 88valid_data.shape 89 90# 単純なTensorFlowニューラルネットワーク層を構築するためのヘルパー関数(成功) 91def make_nn_layer(input, output_size): 92 input_size = input.get_shape().as_list()[1] 93 weights = tf.Variable(tf.truncated_normal( 94 [input_size, output_size], 95 stddev=1.0 / math.sqrt(float(input_size)))) 96 biases = tf.Variable(tf.zeros([output_size])) 97 return tf.matmul(input, weights) + biases 98 99# ロジットと訓練データとの間のクロスエントロピーを最小にするために、KingmaおよびBaのAdamアルゴリズムを使用する訓練ステップを定義する。 最後に、単純な全体的なパーセント精度測定を定義(ここで失敗) 100NUM_INPUT_BANDS = 7 101NUM_HIDDEN_1 = 20 102NUM_HIDDEN_2 = 20 103NUM_CLASSES = 2 104 105input = tf.placeholder(tf.float32, shape=[None, NUM_INPUT_BANDS]) 106labels = tf.placeholder(tf.float32, shape=[None]) 107 108normalized = (input - data_mean) / data_std 109hidden1 = tf.nn.tanh(make_nn_layer(normalized, NUM_HIDDEN_1)) 110hidden2 = tf.nn.tanh(make_nn_layer(hidden1, NUM_HIDDEN_2)) 111logits = make_nn_layer(hidden2, NUM_CLASSES) 112outputs = tf.argmax(logits, 1) 113 114int_labels = tf.to_int64(labels) 115cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits, int_labels, name='xentropy') 116train_step = tf.train.AdamOptimizer().minimize(cross_entropy) 117 118correct_prediction = tf.equal(outputs, int_labels) 119accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

該当のソースコード

上記コードで失敗した部分を抜き出します。

NUM_INPUT_BANDS = 7 NUM_HIDDEN_1 = 20 NUM_HIDDEN_2 = 20 NUM_CLASSES = 2 input = tf.placeholder(tf.float32, shape=[None, NUM_INPUT_BANDS]) labels = tf.placeholder(tf.float32, shape=[None]) normalized = (input - data_mean) / data_std hidden1 = tf.nn.tanh(make_nn_layer(normalized, NUM_HIDDEN_1)) hidden2 = tf.nn.tanh(make_nn_layer(hidden1, NUM_HIDDEN_2)) logits = make_nn_layer(hidden2, NUM_CLASSES) outputs = tf.argmax(logits, 1) int_labels = tf.to_int64(labels) cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits, int_labels, name='xentropy') train_step = tf.train.AdamOptimizer().minimize(cross_entropy) correct_prediction = tf.equal(outputs, int_labels) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

エラーメッセージ

Python

1--------------------------------------------------------------------------- 2ValueError Traceback (most recent call last) 3<ipython-input-30-14215e7284ca> in <module>() 4 14 5 15 int_labels = tf.to_int64(labels) 6---> 16 cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits, int_labels, name='xentropy') 7 17 train_step = tf.train.AdamOptimizer().minimize(cross_entropy) 8 18 9 10/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/nn_ops.py in sparse_softmax_cross_entropy_with_logits(_sentinel, labels, logits, name) 11 2617 """ 12 2618 _ensure_xent_args("sparse_softmax_cross_entropy_with_logits", _sentinel, 13-> 2619 labels, logits) 14 2620 15 2621 # TODO(pcmurray) Raise an error when the label is not an index in 16 17/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/nn_ops.py in _ensure_xent_args(name, sentinel, labels, logits) 18 2313 if sentinel is not None: 19 2314 raise ValueError("Only call `%s` with " 20-> 2315 "named arguments (labels=..., logits=..., ...)" % name) 21 2316 if labels is None or logits is None: 22 2317 raise ValueError("Both labels and logits must be provided.") 23 24ValueError: Only call `sparse_softmax_cross_entropy_with_logits` with named arguments (labels=..., logits=..., ...)

試したこと

どこでどのように失敗しているのかよくわからず、何も試せませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ValueError: Only call `sparse_softmax_cross_entropy_with_logits` with named arguments (labels=..., logits=..., ...)

たぶん「この関数はキーワード引数しか取らない」と言っています。リファレンスにもそんな記述があります。

Note that to avoid confusion, it is required to pass only named arguments to this function.

tf.nn.sparse_softmax_cross_entropy_with_logits  |  TensorFlow

正しいかどうかわからないけど、修正するとしたらこんな感じです。

python

1cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=int_labels, name='xentropy')

投稿2019/03/03 02:36

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/03/03 12:45

ありがとうございます・・・コードが動きました・・・!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問