r"""Constructs a simple ensemble of weak learners model. --------- --------- --------- --------- | Input | | Input | ... | Input | | Input | --------- --------- --------- --------- | | | |
()
| 1020 | |
| 1021 | |
| 1022 | def make_model(): |
| 1023 | r"""Constructs a simple ensemble of weak learners model. |
| 1024 | |
| 1025 | --------- --------- --------- --------- |
| 1026 | | Input | | Input | ... | Input | | Input | |
| 1027 | --------- --------- --------- --------- |
| 1028 | | | | | |
| 1029 | V V V V |
| 1030 | --------- --------- --------- --------- |
| 1031 | | Embed | | Embed | ... | Embed | | Embed | |
| 1032 | --------- --------- --------- --------- |
| 1033 | | | | | |
| 1034 | V V V V |
| 1035 | --------- --------- --------- --------- |
| 1036 | | Dense | | Dense | ... | Dense | | Dense | |
| 1037 | --------- --------- --------- --------- |
| 1038 | \ | | / |
| 1039 | \ | | / |
| 1040 | --------------------------------------------- |
| 1041 | | |
| 1042 | --------- |
| 1043 | | Dense | |
| 1044 | --------- |
| 1045 | |
| 1046 | This topology is chosen because it excercises both dense and sparse update |
| 1047 | paths. |
| 1048 | |
| 1049 | Returns: |
| 1050 | A model for testing optimizer coefficient reuse. |
| 1051 | """ |
| 1052 | inputs = [] |
| 1053 | intermediates = [] |
| 1054 | for _ in range(_NUM_LEARNERS): |
| 1055 | inp = keras.layers.Input(shape=(1,), dtype=dtypes.int32) |
| 1056 | layer = keras.layers.Embedding(1, 4)(inp) |
| 1057 | layer = keras.layers.Dense(1)(layer) |
| 1058 | |
| 1059 | inputs.append(inp) |
| 1060 | intermediates.append(layer) |
| 1061 | |
| 1062 | layer = keras.layers.Concatenate(axis=-1)(intermediates) |
| 1063 | layer = keras.layers.Dense(1)(layer) |
| 1064 | |
| 1065 | return keras.models.Model(inputs, layer) |
| 1066 | |
| 1067 | |
| 1068 | COEFFICIENT_PARAMS = ( |
no test coverage detected