Python 与模型适合的训练数据形状不同的预测值

Python 与模型适合的训练数据形状不同的预测值,python,tensorflow,machine-learning,Python,Tensorflow,Machine Learning,我正在尝试训练一个深度神经网络,以便能够根据字符串的值对其进行分类。这意味着我的数据都是文本。然而,它不是句子意义上的文本,这是我在互联网上看到的大多数文本分类线程所谈论的。为了使算法能够工作,我对输入进行了热编码(尽管这些不是分类值,所以我不确定是否有更正确的编码方法)并训练了模型。然而,问题是,当我尝试运行算法在测试或训练数据集中没有看到的新文本字符串时,算法希望输入是一个热编码训练数据集的形状。我们应该如何训练一个模型,然后改变输入,使它接受一个实际的字符串,这个字符串的形状不一定与模型所

我正在尝试训练一个深度神经网络,以便能够根据字符串的值对其进行分类。这意味着我的数据都是文本。然而,它不是句子意义上的文本,这是我在互联网上看到的大多数文本分类线程所谈论的。为了使算法能够工作,我对输入进行了热编码(尽管这些不是分类值,所以我不确定是否有更正确的编码方法)并训练了模型。然而,问题是,当我尝试运行算法在测试或训练数据集中没有看到的新文本字符串时,算法希望输入是一个热编码训练数据集的形状。我们应该如何训练一个模型,然后改变输入,使它接受一个实际的字符串,这个字符串的形状不一定与模型所适合的形状相同

以下是培训数据的示例:

SB-01_0-1_20200701    1
11-22-4334            0
MW-01_20200621        1
Benzene               0
为了说明这个问题,下面是模型本身的代码:

DNNmodel = keras.Sequential([
keras.layers.Dense(1),  #input layer size
keras.layers.Dense(64, activation='relu'),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(1)   #output layer size
])

DNNmodel.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

DNNmodel.fit(x_train, y_train, epochs=3, batch_size=32)
当我尝试跑步时:

 DNNmodel.predict(np.array(["RI-SB-01_0-5_20200102"]))
为了尝试对单个字符串值进行分类,我得到的值错误为“ValueError:layer sequential_21的输入0与layer不兼容:输入形状的预期轴-1具有值10509,但收到的输入具有形状[None,1]。”


有关于如何做到这一点的提示吗?

你不能这样做。输入和输出的所有输入和输出的形状 您的网络必须始终相同

为了绕过这个限制,您应该将字符串编码为 固定大小的向量。这样,如果需要20维向量:

X = ['SB-01_0-1_20200701', '11-22-4334', 'MW-01_20200621', 'Benzene']
X = [[ord(c) for c in x] for x in X]
X = [x + [0] * (20 - len(x)) for x in X]
X = np.array(X)
应相应地更改您的网络:

DNNmodel = keras.Sequential([
    keras.layers.Dense(20),  #input layer size
    keras.layers.Dense(64, activation='relu'),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(1)   #output layer size
])
然后,在预测时,您必须以与您相同的方式对输入进行编码
对训练数据进行了编码。

投票结果有点混乱……很抱歉,我对数据科学还是相当陌生。感谢您的反馈!我猜代码中的X就是训练数据集?在将代码拆分为培训和测试之前,我尝试运行您的代码时遇到了相同的形状错误。