Python 具有多个热阵列的Keras模型的输入形状

Python 具有多个热阵列的Keras模型的输入形状,python,tensorflow,keras,input,Python,Tensorflow,Keras,Input,我不太明白当尝试使用多个热编码数组时,keras模型的输入形状和尺寸是如何工作的 features = [[first_one_hot] + [second_one_hot] + \ [third_one_hot] + [fourth_one_hot] + [sixt_one_hot] + [seventh_one_hot]+ ...] 例如,这是我的功能状态,包含9个热编码数组 features = [[first_one_hot] + [second_on

我不太明白当尝试使用多个热编码数组时,keras模型的输入形状和尺寸是如何工作的

 features = [[first_one_hot] + [second_one_hot] + \
               [third_one_hot] + [fourth_one_hot] + [sixt_one_hot] + [seventh_one_hot]+ ...]
例如,这是我的功能状态,包含9个热编码数组

 features = [[first_one_hot] + [second_one_hot] + \
               [third_one_hot] + [fourth_one_hot] + [sixt_one_hot] + [seventh_one_hot]+ ...]
形状为:(3,4,4,5,5,5,10,10),其中:

形状:形状(30,4,10)指三维数组或张量,第一维包含30个元素,第二维包含4个元素,第三维包含10个元素,总计30*4*10=1200个元素或数字

如果我只是解包我的每个one-hot数组,我的模型在给定(1,56)形状的情况下工作-但据我所知,模型不太清楚这样做时哪些值对应于哪个hot

问题1 首先,我是否正确地理解了上面数组中连接的每个特性都应该分开,而不是像我提到的那样使用(1,56)数组?让我们说,而不是:

[1,0,0,0,1,0,0,0,…]使用:

[1,0,0],[1,0,0,0]

如果是这样,我应该如何为模型提供单独的onehot?我是机器学习新手,所以这可能是一个奇怪的问题

问题2 如果是这样,将主题相似的Onehot分组到单独的输入层有什么好处

我的build_模型现在只使用一个输入dim,层大小为(1,56):

 def _build_model(self, hl1_dims, hl2_dims, hl3_dims, input_layer_size, output_layer_size, optimizer, loss):
    model = Sequential()

    # My input_layer_size is set to 9, as I have 9 dimensions
    model.add(Dense(hl1_dims, input_dim=input_layer_size))
    model.add(BatchNormalization())
    model.add(Activation('relu'))

    # Second Hidden Layer
    ...
据我所知,我也可以使用多个输入层,比如:

input_3d = Input(shape=(3,))
input_4d = Input(shape=(4,))
input_5d = Input(shape=(5,))
input_10d = Input(shape=(10,))

# multiple branches, for example:
branch_3d = Dense(32, activation='relu')(input_3d)
branch_3d = Dense(32, activation='relu')(branch_3d)
m_3d = Model(inputs=input_3d, outputs=branch_3d)

 # Combine all output of branches
combined = Concatenate(axis=1)([m_3d.output, m_4d.output, m_5d.output, m_10d.output])

# Apply FC Layer
out = Dense(16, activation='relu')(combined)
out = Dense(output_layer_size, activation='linear')(out)

# Model accepts inputs of all branches and output action space based on output_layer_size
model = Model(inputs=[m_3d.input, m_4d.input, m_5d.input, m_10d.input], outputs=out)
我尝试了上述实现,但从未真正实现,主要错误如下:

ValueError: Error when checking input: expected dense_input to have 2 dimensions, but got array with shape (1, 1, 9)

但正如我所说,我甚至不确定是否将分类输入拆分为单独的层,或者将所有分类特征合并为一个形状是否是最佳做法。非常感谢您在这方面的任何意见。

就我的研究所知,我认为我在构建模型时遇到了一个基本问题。输入特征具有不同的形状。到目前为止,我一直试图将整个状态连接成一个状态,并将其输入神经网络。我现在试图理解的是——不同的输入特性,其中很少有形状不同的,似乎必须使用Keras函数API将其拆分为具有相应形状的单独输入向量。在每个输入都被加载后,网络被缓慢地连接在一起,从神经网络获得一个单一的输出向量。信息有点混乱。请您共享数据集或共享数据快照,例如通过运行命令,
pandas\u dataframe.head()
,以便我们能够真正了解您的数据。谢谢Hei@TensorflowSupport很抱歉我回复晚了。在我的第一篇文章中做了一些编辑,因为我同时修改了一些实现。希望它足够清晰,否则让我知道我将尝试澄清更多。就我的研究而言,我认为我在构建模型方面有一个基本问题。输入特征具有不同的形状。到目前为止,我一直试图将整个状态连接成一个状态,并将其输入神经网络。我现在试图理解的是——不同的输入特性,其中很少有形状不同的,似乎必须使用Keras函数API将其拆分为具有相应形状的单独输入向量。在每个输入都被加载后,网络被缓慢地连接在一起,从神经网络获得一个单一的输出向量。信息有点混乱。请您共享数据集或共享数据快照,例如通过运行命令,
pandas\u dataframe.head()
,以便我们能够真正了解您的数据。谢谢Hei@TensorflowSupport很抱歉我回复晚了。在我的第一篇文章中做了一些编辑,因为我同时修改了一些实现。希望它足够清楚,否则让我知道我会尝试澄清更多。