首页 > 解决方案 > 我无法将列表转换为适合 keras 模型的张量

问题描述

我定义了一个如下的深度模型:

    model = Sequential()
    inputs = keras.Input(shape=(19,))
    layer1 = Dense(38, activation='relu')(inputs)
    layer2 = Dense(19, activation='relu')(layer1)
    layer3 = Dense(38, activation='relu')(layer2)

    outputs1 = keras.layers.Dense(19, activation='softmax', name='loss1')(layer3)
    outputs2 = keras.layers.Dense(19, activation='softmax', name='loss2')(layer3)

    model = keras.Model(inputs=[inputs], outputs=[outputs1,outputs2])

   model.compile(loss=['kullback_leibler_divergence', 'kullback_leibler_divergence'], 
   metrics=['accuracy'], optimizer='adam', loss_weights=[1.0, 1.0])

   model.fit(X_train,[y1_target,y2_target],epochs=10,batch_size=64)

但我收到此错误:

无法将 NumPy 数组转换为张量(不支持的对象类型列表)。

所以我尝试通过以下方式将列表转换为张量:

    tf.convert_to_tensor(X_train, dtype=tf.float32)

我遇到了这个错误:使用序列设置数组元素。

所以我尝试使用以下代码:

    def vector_seq(sequences, dimension =19):
      print(type(sequences))
      results = np.zeros((len(sequences), dimension))
      for i, sequence in enumerate(sequences):
         results[i, sequence] = 1.
    return results

    X_train = vector_seq(X_train)
   y1_target = asarray(y1_target)
   y2_target = asarray(y2_target)

但是对于上面的代码,我又遇到了这个错误:只有整数、切片(:)、省略号(...)、numpy.newaxis(None)和整数或布尔数组是有效的索引

X_train 就像这个图像:在此处输入图像描述 y1_target 和 y2_target 类似于 X_train。

我该如何解决这些错误?

标签: python

解决方案


我解决了这个问题,首先将 X_train 转换为 numpy 数组(最初 X_train 是数据帧的行(一列):

    X_train = np.asarray(X_train)

然后

    X = np.array(X_train.tolist())

    X=tf.convert_to_tensor(X, dtype=tf.float32)

它有效!


推荐阅读