我有一个聊天机器人模型,我使用数据集对其进行了训练,以提供“标准”对话,例如“你好”、“你好吗”之类的。现在我想用一个数据集“扩展”现有模型,该数据集提供与运输、库存等相关问题的答案。
这是我的工作/已经训练好的模型:
# create Sequential model
model = Sequential()
# add first layer with input shape dependent on size of input and "relu" activation function
model.add(Dense(256, input_shape=(len(training_data_x[0]),), activation=activations.relu))
# add Dropout to prevent overfitting
model.add(Dropout(0.6))
# additional layer with 64 neurons
model.add(Dense(128, activation=activations.relu))
model.add(Dropout(0.2))
# Additional dense layer with num of neurons of classes & softmax activation function
# -> adds results in output layer to "1" to get %
model.add(Dense(len(training_data_y[0]), activation=activations.softmax))
# print(len(training_data_y[0])) = 71
sgd = SGD(learning_rate=0.01, decay=1e-6, momentum=0.9, nesterov=True)
# compile the model
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])
output = model.fit(np.array(training_data_x), np.array(training_data_y), epochs=200, batch_size=5, verbose=1)
plot_model_output(output)
model.summary()
model.save('./MyModel_tf', save_format='tf')
训练数据在单独的类中准备,并以某个 json 文件作为输入。
现在我只是将 JSON 文件替换为包含与我想要添加到模型中的内容相关的数据的文件,并尝试像这样拟合它:
json_data = json.loads(open('data.json').read())
model = load_model('MyModel_tf')
model.fit(np.array(training_data_x), np.array(training_data_y), epochs=200, batch_size=5, verbose=1)
但是,当我运行它时,我收到此错误:
ValueError: Input 0 of layer "sequential" is incompatible with the layer: expected shape=(None, 652), found shape=(None, 71)
我假设数据是问题所在..但是它的结构完全相同,只是更短。
我的问题:
问题可能出在这一行
model.add(Dense(256, input_shape=(len(training_data_x[0]),), activation=activations.relu))
您可以根据
training_data_x
特征维度的大小定义模型的输入形状。现在您已经定义了这个非常具体的输入形状,输入模型的所有数据必须具有相同的特征维度大小。这就是你错误的原因。