如何训练标签为[5,30]形状的模型?

如何训练一个数据集,其中每个标签的形状为[5,30]?例如:

[       [ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 54, 55, 21, 56, 57,  3,        22, 19, 58,  6, 59,  4, 60,  1, 61, 62, 23, 63, 23, 64],       [ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,         0,  0,  0,  0,  1, 65,  7, 66,  2, 67, 68,  3, 69, 70],       [ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,         0, 11, 12,  5, 13, 14,  9, 10,  5, 15, 16, 17,  2,  8],       [ 0,  0,  0,  0,  0,  2, 71,  1, 72, 73, 74,  7, 75, 76, 77,  3,        20, 78, 18, 79,  1, 21, 80, 81,  3, 82, 83, 84,  6, 85],       [ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,        86, 87,  3, 88, 89,  1, 90, 91, 22, 92, 93,  4,  6, 94]]

一种方法是将标签重塑为[150],但这会使分词后的句子失去意义。请建议我如何安排keras层以及使用哪些层来构建模型?我希望能够在以后生成句子。

我目前的模型代码如下:

model = tf.keras.Sequential([ feature_layer, layers.Dense(128, activation='relu'), layers.Dense(128, activation='relu'), layers.Dropout(.1), layers.Dense(5), layers.Dense(30, activation='softmax'), ]) opt = Adam(learning_rate=0.01) model.compile(optimizer=opt, loss='mean_absolute_percentage_error', metrics=['accuracy']) 

实际数据如下:

月份 降雨量 最高温度 最低温度 最高湿度 最低湿度 风速 建议
奥里萨 肯德拉帕拉 二月 0.0 34.6 19.4 88.2 29.6 12.0 水稻作物有发生脚腐病的风险;在移植后3周的活跃分蘖期施用尿素;……
贾坎德 萨赖凯拉-卡尔萨万 二月 0 35.2 16.6 29.4 11.2 3.6 提供秸秆覆盖并进行田间管理操作以避免土壤水分流失;马铃薯作物有发生叶枯病的风险;…….

我需要能够生成这些建议。


回答:

如果你认为输出需要保持这种形状(而不是扁平化),最简单(也是我认为正确的解决方案)是使用多输出网络,每个输出都有一个layers.Dense(30,activation='softmax')

你可以这样做:

def create_model():    base_model = .... (堆叠的Dense单元 + 其他) # 你甚至可以创建多输入多输出的模型,如果你真的需要的话。    first_output = Dense(30,activation='softmax',name='output_1')(base_model)     second_output = Dense(30,activation='softmax',name='output_2')(base_model)    ...    fifth_output = Dense(30,activation='softmax',name='output_5')(base_model)    model = Model(inputs=input_layer,                  outputs=[first_output,second_output,third_output,fourth_output,fifth_output])    return modeloptimizer = tf.keras.optimizers.Adam()model.compile(optimizer=optimizer,              loss={'output_1': 'sparse_categorical_crossentropy',                     'output_2': 'sparse_categorical_crossentropy',                    'output_3': 'sparse_categorical_crossentropy',                    'output_4': 'sparse_categorical_crossentropy',                    'output_5': 'sparse_categorical_crossentropy'},              metrics={'output_1':tf.keras.metrics.Accuracy(),                       'output_2':tf.keras.metrics.Accuracy(),                       'output_3':tf.keras.metrics.Accuracy(),                       'output_4':tf.keras.metrics.Accuracy(),                       'output_5':tf.keras.metrics.Accuracy()})model.fit(X, y,          epochs=100, batch_size=10, validation_data=(val_X, val_y))

在这里,请注意y(用于训练和验证的)是一个长度为5(输出数量)的numpy数组,每个元素的长度为30。

再次确认你确实需要这种配置;我发布这个答案是为了展示TensorFlow和Keras中的多输出标签,并且为了其他人的利益,但我并不100%确定你确实需要这个确切的配置(或许你可以选择更简单的方案)。

注意sparse_categorical_crossentropy的使用,因为你的标签不是独热编码的(另外,MAPE用于回归,而不是分类)。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注