【发布时间】:2020-05-11 21:51:29
【问题描述】:
不太确定为这个问题命名的最佳方式是什么,但我想将模型的输出处理为另一层的输入。我目前正在下面这样做,但想稍微更新一下信息。为了简单起见,我简化了模型。假设我们输入5x5 和9 通道,其输出是5x5 和6 通道和5x5 和2 通道。
我的问题是我想处理model_output1,并获取每个通道中的最大值,并且只有 1 和 0(作为第二个模型的输入之一)。
例如,为了简单起见,假设我们有一个带有 3 个通道的 2x2。
[[[0, 1],
[9, 3]]
[[2, 5],
[5, 4]]
[[4, 2],
[8, 7]]]
我想将其仅转换为 0 和 1,其中 1 表示相对于通道轴的最大值。所以对于上面的例子,我想得到:
[[[0, 0],
[1, 0]]
[[0, 1],
[0, 0]]
[[1, 0],
[0, 1]]]
我尝试将model_output1 转换为带有.eval() 或.numpy() 的numpy 数组,但我不断收到错误消息。我正在使用tensorflow-gpu 2.1.0。如果我可以将它转换为 numpy,我知道如何使用 numpy 来实现。
另一种解决方案是只使用 2 个单独的模型。我可以在哪里使用 .predict 获得model_output1,然后对其进行操作以获得我想要的并将其输入到第二个模型。但不确定这是否同样有效。
总而言之,我怎样才能将张量 model_output1 操作为我想要的格式?是否可以使用一些 tf.math 函数来完成它,而不将其转换为 numpy 数组?如果没有,我怎样才能将它转换为 numpy 数组而不抛出任何错误?或者我最好的选择是拥有 2 个不同的模型,然后在 .predict 之后操作第一个输出并将其处理为我想要的输入?
from keras.models import Model
from keras.layers import Dense, Conv2D, Input
from keras.layers.merge import concatenate
from keras.optimizers import Adam
import tensorflow as tf
import numpy as np
def build_model():
model_input = Input(shape=(5, 5, 9))
input_hidden = Conv2D(8, kernel_size=3, activation='relu', padding='same')(model_input )
model_output1 = Dense(6, activation='softmax')(input_hidden)
input_hidden2 = concatenate(inputs=[model_input, model_output1], axis=3)
model_output2 = Dense(2, activation='softmax')(input_hidden2 )
model = Model(inputs=model_input, outputs=[model_output1 , model_output2 ])
model.compile(loss='mse', optimizer=Adam(lr=0.001))
return model
模型总结:
Model: "model_1"
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_1 (InputLayer) (None, 5, 5, 9) 0
__________________________________________________________________________________________________
conv2d_1 (Conv2D) (None, 5, 5, 8) 656 input_1[0][0]
__________________________________________________________________________________________________
dense_1 (Dense) (None, 5, 5, 6) 54 conv2d_1[0][0]
__________________________________________________________________________________________________
concatenate_1 (Concatenate) (None, 5, 5, 15) 0 input_1[0][0]
dense_1[0][0]
__________________________________________________________________________________________________
dense_2 (Dense) (None, 5, 5, 2) 32 concatenate_1[0][0]
==================================================================================================
Total params: 742
Trainable params: 742
Non-trainable params: 0
__________________________________________________________________________________________________
【问题讨论】:
标签: python tensorflow machine-learning keras neural-network