TensorFlow / Kerasで中間レイヤーの出力を取得する

アーメド

Kerasで中間レイヤーの出力を取得しようとしています。コードは次のとおりです。

XX = model.input # Keras Sequential() model object
YY = model.layers[0].output
F = K.function([XX], [YY]) # K refers to keras.backend


Xaug = X_train[:9]
Xresult = F([Xaug.astype('float32')])

これを実行すると、エラーが発生しました:

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'dropout_1/keras_learning_phase' with dtype bool

モデルでドロップアウトレイヤーを使用しているため、learning_phase()kerasのドキュメントに従って関数にフラグを指定する必要があることがわかりましたコードを次のように変更しました。

XX = model.input
YY = model.layers[0].output
F = K.function([XX, K.learning_phase()], [YY])


Xaug = X_train[:9]
Xresult = F([Xaug.astype('float32'), 0])

今、私は理解できない新しいエラーが発生しています:

TypeError: Cannot interpret feed_dict key as Tensor: Can not convert a int into a Tensor.

どんな助けでもいただければ幸いです。
PS:TensorFlowとKerasは初めてです。

編集1:以下は私が使用している完全なコードです。このNIPSペーパーで説明されているように、Spatial Transformer Networkを使用しています。これは、Keraの実装です。

input_shape =  X_train.shape[1:]

# initial weights
b = np.zeros((2, 3), dtype='float32')
b[0, 0] = 1
b[1, 1] = 1
W = np.zeros((100, 6), dtype='float32')
weights = [W, b.flatten()]

locnet = Sequential()
locnet.add(Convolution2D(64, (3, 3), input_shape=input_shape, padding='same'))
locnet.add(Activation('relu'))
locnet.add(Convolution2D(64, (3, 3), padding='same'))
locnet.add(Activation('relu'))
locnet.add(MaxPooling2D(pool_size=(2, 2)))
locnet.add(Convolution2D(128, (3, 3), padding='same'))
locnet.add(Activation('relu'))
locnet.add(Convolution2D(128, (3, 3), padding='same'))
locnet.add(Activation('relu'))
locnet.add(MaxPooling2D(pool_size=(2, 2)))
locnet.add(Convolution2D(256, (3, 3), padding='same'))
locnet.add(Activation('relu'))
locnet.add(Convolution2D(256, (3, 3), padding='same'))
locnet.add(Activation('relu'))
locnet.add(MaxPooling2D(pool_size=(2, 2)))
locnet.add(Dropout(0.5))
locnet.add(Flatten())
locnet.add(Dense(100))
locnet.add(Activation('relu'))
locnet.add(Dense(6, weights=weights))


model = Sequential()

model.add(SpatialTransformer(localization_net=locnet,
                             output_size=(128, 128), input_shape=input_shape))

model.add(Convolution2D(64, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(Convolution2D(64, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Convolution2D(128, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(Convolution2D(128, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Convolution2D(256, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(Convolution2D(256, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Convolution2D(256, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(Convolution2D(256, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(256))
model.add(Activation('relu'))

model.add(Dense(num_classes))
model.add(Activation('softmax'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

#==============================================================================
# Start Training
#==============================================================================
#define training results logger callback
csv_logger = keras.callbacks.CSVLogger(training_logs_path+'.csv')
model.fit(X_train, y_train,
          batch_size=batch_size,
          epochs=20,
          validation_data=(X_valid, y_valid),
          shuffle=True,
          callbacks=[SaveModelCallback(), csv_logger])




#==============================================================================
# Visualize what Transformer layer has learned
#==============================================================================

XX = model.input
YY = model.layers[0].output
F = K.function([XX, K.learning_phase()], [YY])


Xaug = X_train[:9]
Xresult = F([Xaug.astype('float32'), 0])

# input
for i in range(9):
    plt.subplot(3, 3, i+1)
    plt.imshow(np.squeeze(Xaug[i]))
    plt.axis('off')

for i in range(9):
    plt.subplot(3, 3, i + 1)
    plt.imshow(np.squeeze(Xresult[0][i]))
    plt.axis('off')
pgrenholm

最も簡単な方法は、バックエンドを呼び出さずに、Kerasで新しいモデルを作成することです。これには機能モデルAPIが必要です。

from keras.models import Model

XX = model.input 
YY = model.layers[0].output
new_model = Model(XX, YY)

Xaug = X_train[:9]
Xresult = new_model.predict(Xaug)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Tensorflow 2ハブ:中間レイヤーの出力を取得するにはどうすればよいですか?

分類Dev

Tensorflowで出力レイヤーのノルムを計算する

分類Dev

TensorflowでLSTMの高密度レイヤー出力を取得するにはどうすればよいですか?

分類Dev

Keras / Tensorflow:すべてのレイヤーの予測または出力を効率的に取得します

分類Dev

KerasでのTensorflowレイヤーの使用

分類Dev

トレーニングされたCNNモデルの特定のレイヤーの出力を取得する方法[Tensorflow]

分類Dev

TensorFlowモデルの非表示レイヤー間の値を出力します

分類Dev

予測中にKeras / Tensorflowから中間出力を取得する

分類Dev

TensorFlow / Keras:出力レイヤーの形状エラー

分類Dev

TensorFlowで固定の重みでレイヤーを構築する

分類Dev

Keras / TensorFlowのカスタムレイヤーでカーネル正則化を適用する方法

分類Dev

TensorFlowを使用してBatchNormレイヤーでKerasモデルをトレーニングする

分類Dev

2DDCTを計算するKeras / Tensorflowレイヤーを作成します

分類Dev

Tensorflow / Keras Flattenレイヤーがアレイをフラット化しないのはなぜですか?

分類Dev

TensorFlow 2.0Conv2DやDenseなどのtf.keras.layersレイヤーからトレーニング可能な変数を取得する方法

分類Dev

kerasまたはTensorflowのLSTMレイヤーの前に高密度レイヤーを追加しますか?

分類Dev

Tensorflowでレイヤーウェイトを再利用する

分類Dev

Tensorflowの出力でnan値を取得する

分類Dev

TensorFlowで個々のレイヤーの重み減衰を定義する方法は?

分類Dev

複数のクラスを持つ最後の出力レイヤー。Tensorflowに支えられたKeras

分類Dev

TensorFlow-レイヤー間で異なるビット幅の量子化

分類Dev

Tensorflow 2.x Kerasカスタムレイヤーで複数の入力を使用するにはどうすればよいですか?

分類Dev

Tensorflowテンソルを使用してKerasレイヤーの入力を設定するにはどうすればよいですか?

分類Dev

トレーニング実行間の中間レイヤー内の各エポックでパラメーターを更新するにはどうすればよいですか?(tensorflow熱心な実行)

分類Dev

Kerasでレイヤーの出力形状を取得する方法は?

分類Dev

Tensorflow2.0のKeras入力レイヤーでのtf.data.Datasetの使用

分類Dev

TensorFlowでレイヤーを2つのレイヤーに同時に並行して渡す方法

分類Dev

TensorFlow で個々のレイヤーをテストするにはどうすればよいですか?

分類Dev

Tensorflow Kerasモデルがトレーニング中に奇妙な損失と精度の値を出力するのはなぜですか?

Related 関連記事

  1. 1

    Tensorflow 2ハブ:中間レイヤーの出力を取得するにはどうすればよいですか?

  2. 2

    Tensorflowで出力レイヤーのノルムを計算する

  3. 3

    TensorflowでLSTMの高密度レイヤー出力を取得するにはどうすればよいですか?

  4. 4

    Keras / Tensorflow:すべてのレイヤーの予測または出力を効率的に取得します

  5. 5

    KerasでのTensorflowレイヤーの使用

  6. 6

    トレーニングされたCNNモデルの特定のレイヤーの出力を取得する方法[Tensorflow]

  7. 7

    TensorFlowモデルの非表示レイヤー間の値を出力します

  8. 8

    予測中にKeras / Tensorflowから中間出力を取得する

  9. 9

    TensorFlow / Keras:出力レイヤーの形状エラー

  10. 10

    TensorFlowで固定の重みでレイヤーを構築する

  11. 11

    Keras / TensorFlowのカスタムレイヤーでカーネル正則化を適用する方法

  12. 12

    TensorFlowを使用してBatchNormレイヤーでKerasモデルをトレーニングする

  13. 13

    2DDCTを計算するKeras / Tensorflowレイヤーを作成します

  14. 14

    Tensorflow / Keras Flattenレイヤーがアレイをフラット化しないのはなぜですか?

  15. 15

    TensorFlow 2.0Conv2DやDenseなどのtf.keras.layersレイヤーからトレーニング可能な変数を取得する方法

  16. 16

    kerasまたはTensorflowのLSTMレイヤーの前に高密度レイヤーを追加しますか?

  17. 17

    Tensorflowでレイヤーウェイトを再利用する

  18. 18

    Tensorflowの出力でnan値を取得する

  19. 19

    TensorFlowで個々のレイヤーの重み減衰を定義する方法は?

  20. 20

    複数のクラスを持つ最後の出力レイヤー。Tensorflowに支えられたKeras

  21. 21

    TensorFlow-レイヤー間で異なるビット幅の量子化

  22. 22

    Tensorflow 2.x Kerasカスタムレイヤーで複数の入力を使用するにはどうすればよいですか?

  23. 23

    Tensorflowテンソルを使用してKerasレイヤーの入力を設定するにはどうすればよいですか?

  24. 24

    トレーニング実行間の中間レイヤー内の各エポックでパラメーターを更新するにはどうすればよいですか?(tensorflow熱心な実行)

  25. 25

    Kerasでレイヤーの出力形状を取得する方法は?

  26. 26

    Tensorflow2.0のKeras入力レイヤーでのtf.data.Datasetの使用

  27. 27

    TensorFlowでレイヤーを2つのレイヤーに同時に並行して渡す方法

  28. 28

    TensorFlow で個々のレイヤーをテストするにはどうすればよいですか?

  29. 29

    Tensorflow Kerasモデルがトレーニング中に奇妙な損失と精度の値を出力するのはなぜですか?

ホットタグ

アーカイブ