如何训练标签为[5,30]的模型?
how to train model in which labels is [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'])
实际数据。
state
district
month
rainfall
max_temp
min_temp
max_rh
min_rh
wind_speed
advice
Orissa
Kendrapada
february
0.0
34.6
19.4
88.2
29.6
12.0
chances of foot rot disease in paddy crop; apply urea at 3 weeks after transplanting at active tillering stage for paddy;......
Jharkhand
Saraikela Kharsawan
february
0
35.2
16.6
29.4
11.2
3.6
provide straw mulch and go for intercultural operations to avoid moisture losses from soil; chance of leaf blight disease in potato crop; .......
我需要能够生成建议。
如果你确实认为输出需要是这种形状(而不是扁平化),最简单的(在我看来也是正确的解决方案)是有一个多输出网络,每个输出都有一个 layers.Dense(30,activation='softmax')
.
你会得到类似的东西:
def create_model():
base_model = .... (stacked Dense units + other) # you can even create multi-input multi-output if you really want that.
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 model
optimizer = 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 用于回归,而不是分类)。
如何在每个标签形状为 [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'])
实际数据。
state | district | month | rainfall | max_temp | min_temp | max_rh | min_rh | wind_speed | advice |
---|---|---|---|---|---|---|---|---|---|
Orissa | Kendrapada | february | 0.0 | 34.6 | 19.4 | 88.2 | 29.6 | 12.0 | chances of foot rot disease in paddy crop; apply urea at 3 weeks after transplanting at active tillering stage for paddy;...... |
Jharkhand | Saraikela Kharsawan | february | 0 | 35.2 | 16.6 | 29.4 | 11.2 | 3.6 | provide straw mulch and go for intercultural operations to avoid moisture losses from soil; chance of leaf blight disease in potato crop; ....... |
我需要能够生成建议。
如果你确实认为输出需要是这种形状(而不是扁平化),最简单的(在我看来也是正确的解决方案)是有一个多输出网络,每个输出都有一个 layers.Dense(30,activation='softmax')
.
你会得到类似的东西:
def create_model():
base_model = .... (stacked Dense units + other) # you can even create multi-input multi-output if you really want that.
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 model
optimizer = 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 用于回归,而不是分类)。