时间:2021-05-22
1、模型结果设计
2、代码
from keras import Input, Modelfrom keras.layers import Dense, Concatenateimport numpy as npfrom keras.utils import plot_modelfrom numpy import random as rdsamples_n = 3000samples_dim_01 = 2samples_dim_02 = 2# 样本数据x1 = rd.rand(samples_n, samples_dim_01)x2 = rd.rand(samples_n, samples_dim_02)y_1 = []y_2 = []y_3 = []for x11, x22 in zip(x1, x2): y_1.append(np.sum(x11) + np.sum(x22)) y_2.append(np.max([np.max(x11), np.max(x22)])) y_3.append(np.min([np.min(x11), np.min(x22)]))y_1 = np.array(y_1)y_1 = np.expand_dims(y_1, axis=1)y_2 = np.array(y_2)y_2 = np.expand_dims(y_2, axis=1)y_3 = np.array(y_3)y_3 = np.expand_dims(y_3, axis=1)# 输入层inputs_01 = Input((samples_dim_01,), name='input_1')inputs_02 = Input((samples_dim_02,), name='input_2')# 全连接层dense_01 = Dense(units=3, name="dense_01", activation='softmax')(inputs_01)dense_011 = Dense(units=3, name="dense_011", activation='softmax')(dense_01)dense_02 = Dense(units=6, name="dense_02", activation='softmax')(inputs_02)# 加入合并层merge = Concatenate()([dense_011, dense_02])# 分成两类输出 --- 输出01output_01 = Dense(units=6, activation="relu", name='output01')(merge)output_011 = Dense(units=1, activation=None, name='output011')(output_01)# 分成两类输出 --- 输出02output_02 = Dense(units=1, activation=None, name='output02')(merge)# 分成两类输出 --- 输出03output_03 = Dense(units=1, activation=None, name='output03')(merge)# 构造一个新模型model = Model(inputs=[inputs_01, inputs_02], outputs=[output_011, output_02, output_03 ])# 显示模型情况plot_model(model, show_shapes=True)print(model.summary())# # 编译# model.compile(optimizer="adam", loss='mean_squared_error', loss_weights=[1,# 0.8,# 0.8# ])# # 训练# model.fit([x1, x2], [y_1,# y_2,# y_3# ], epochs=50, batch_size=32, validation_split=0.1)# 以下的方法可灵活设置model.compile(optimizer='adam', loss={'output011': 'mean_squared_error', 'output02': 'mean_squared_error', 'output03': 'mean_squared_error'}, loss_weights={'output011': 1, 'output02': 0.8, 'output03': 0.8})model.fit({'input_1': x1, 'input_2': x2}, {'output011': y_1, 'output02': y_2, 'output03': y_3}, epochs=50, batch_size=32, validation_split=0.1)# 预测test_x1 = rd.rand(1, 2)test_x2 = rd.rand(1, 2)test_y = model.predict(x=[test_x1, test_x2])# 测试print("测试结果:")print("test_x1:", test_x1, "test_x2:", test_x2, "y:", test_y, np.sum(test_x1) + np.sum(test_x2))补充知识:Keras多输出(多任务)如何设置fit_generator
在使用Keras的时候,因为需要考虑到效率问题,需要修改fit_generator来适应多输出
# create modelmodel = Model(inputs=x_inp, outputs=[main_pred, aux_pred])# complie modelmodel.compile( optimizer=optimizers.Adam(lr=learning_rate), loss={"main": weighted_binary_crossentropy(weights), "auxiliary":weighted_binary_crossentropy(weights)}, loss_weights={"main": 0.5, "auxiliary": 0.5}, metrics=[metrics.binary_accuracy],)# Train modelmodel.fit_generator( train_gen, epochs=num_epochs, verbose=0, shuffle=True)看Keras官方文档:
generator: A generator or an instance of Sequence (keras.utils.Sequence) object in order to avoid duplicate data when using multiprocessing. The output of the generator must be either
a tuple (inputs, targets)
a tuple (inputs, targets, sample_weights).
Keras设计多输出(多任务)使用fit_generator的步骤如下:
根据官方文档,定义一个generator或者一个class继承Sequence
class Batch_generator(Sequence): """ 用于产生batch_1, batch_2(记住是numpy.array格式转换) """ y_batch = {'main':batch_1,'auxiliary':batch_2} return X_batch, y_batch# or in another waydef batch_generator(): """ 用于产生batch_1, batch_2(记住是numpy.array格式转换) """ yield X_batch, {'main': batch_1,'auxiliary':batch_2}重要的事情说三遍(亲自采坑,搜了一大圈才发现滴):
如果是多输出(多任务)的时候,这里的target是字典类型
如果是多输出(多任务)的时候,这里的target是字典类型
如果是多输出(多任务)的时候,这里的target是字典类型
以上这篇Keras-多输入多输出实例(多任务)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
路由器mumimo是指多用户多输入多输出的意思。MU-MIMO多用户多输入多输出,是常见的多天线技术。Beamforming即波束成形,是通用信号处理技术,用于
路由器mumimo是指多用户多输入多输出的意思。多输入多输出(MIMO)技术已经成为下一代无线通信系统的关键技术之一。目前,已经有不少关于点对点的单用户MIMO
路由器mumimo需要开启。MIMO,即MultipleInputMultipleOutput(多输入多输出)的缩写,MIMO技术可简单理解为将网络资源进行多重
路由器,采用先进的MIMO(多输入,多输出)技术,具有发射功率高、信号穿透能力强、传输速度快的优点,为用户提供高达300Mbps无线传输速率,它能在我玩网游的时
写的一个关于遍历文件的程序段记录一下咯--[[检查所有.txt文件比如A.txt中第一行规定有20列,但是在X行中多输入一个Tab,则输出:A表的X行填写不规范