Anda mendapatkan kesalahan karena result
didefinisikan sebagai Sequential()
hanya wadah untuk model dan Anda belum menentukan masukan untuk itu.
Mengingat apa yang Anda coba buat, set result
untuk mengambil input ketiga x3
.
first = Sequential()
first.add(Dense(1, input_shape=(2,), activation='sigmoid'))
second = Sequential()
second.add(Dense(1, input_shape=(1,), activation='sigmoid'))
third = Sequential()
third.add(Dense(1, input_shape=(1,), activation='sigmoid'))
merged = Concatenate([first, second])
result = Concatenate([merged, third])
ada_grad = Adagrad(lr=0.1, epsilon=1e-08, decay=0.0)
result.compile(optimizer=ada_grad, loss='binary_crossentropy',
metrics=['accuracy'])
Namun, cara yang saya sukai untuk membangun model yang memiliki jenis struktur input ini adalah dengan menggunakan api fungsional .
Berikut adalah implementasi dari persyaratan Anda untuk Anda mulai:
from keras.models import Model
from keras.layers import Concatenate, Dense, LSTM, Input, concatenate
from keras.optimizers import Adagrad
first_input = Input(shape=(2, ))
first_dense = Dense(1, )(first_input)
second_input = Input(shape=(2, ))
second_dense = Dense(1, )(second_input)
merge_one = concatenate([first_dense, second_dense])
third_input = Input(shape=(1, ))
merge_two = concatenate([merge_one, third_input])
model = Model(inputs=[first_input, second_input, third_input], outputs=merge_two)
ada_grad = Adagrad(lr=0.1, epsilon=1e-08, decay=0.0)
model.compile(optimizer=ada_grad, loss='binary_crossentropy',
metrics=['accuracy'])
Untuk menjawab pertanyaan di komentar:
- Bagaimana hasil dan penggabungan terhubung? Dengan asumsi yang Anda maksud bagaimana mereka digabungkan.
Penggabungan berfungsi seperti ini:
a b c
a b c g h i a b c g h i
d e f j k l d e f j k l
yaitu baris baru saja bergabung.
- Sekarang,
x1
masukan ke pertama, x2
masukan ke kedua dan x3
masukan ke ketiga.
result
danmerged
(ataumerged2
) terhubung satu sama lain di bagian pertama jawaban Anda?x1
danx2
merupakan masukan untukfirst_input
,x3
untukthird_input
. Tentang apasecond_input
?second_input
dilewatkan melalui sebuahDense
lapisan dan digabungkan denganfirst_input
yang juga dilewatkan melalui sebuahDense
lapisan.third_input
dilewatkan melalui lapisan padat dan digabung dengan hasil penggabungan sebelumnya (merged
)Concatenate()
danconcatenate()
lapisan di Keras?Menambah jawaban yang diterima di atas sehingga membantu mereka yang menggunakan
tensorflow 2.0
import tensorflow as tf # some data c1 = tf.constant([[1, 1, 1], [2, 2, 2]], dtype=tf.float32) c2 = tf.constant([[2, 2, 2], [3, 3, 3]], dtype=tf.float32) c3 = tf.constant([[3, 3, 3], [4, 4, 4]], dtype=tf.float32) # bake layers x1, x2, x3 x1 = tf.keras.layers.Dense(10)(c1) x2 = tf.keras.layers.Dense(10)(c2) x3 = tf.keras.layers.Dense(10)(c3) # merged layer y1 y1 = tf.keras.layers.Concatenate(axis=1)([x1, x2]) # merged layer y2 y2 = tf.keras.layers.Concatenate(axis=1)([y1, x3]) # print info print("-"*30) print("x1", x1.shape, "x2", x2.shape, "x3", x3.shape) print("y1", y1.shape) print("y2", y2.shape) print("-"*30)
Hasil:
------------------------------ x1 (2, 10) x2 (2, 10) x3 (2, 10) y1 (2, 20) y2 (2, 30) ------------------------------
sumber
Anda dapat bereksperimen dengan
model.summary()
(perhatikan ukuran layer concatenate_XX (Concatenate))# merge samples, two input must be same shape inp1 = Input(shape=(10,32)) inp2 = Input(shape=(10,32)) cc1 = concatenate([inp1, inp2],axis=0) # Merge data must same row column output = Dense(30, activation='relu')(cc1) model = Model(inputs=[inp1, inp2], outputs=output) model.summary() # merge row must same column size inp1 = Input(shape=(20,10)) inp2 = Input(shape=(32,10)) cc1 = concatenate([inp1, inp2],axis=1) output = Dense(30, activation='relu')(cc1) model = Model(inputs=[inp1, inp2], outputs=output) model.summary() # merge column must same row size inp1 = Input(shape=(10,20)) inp2 = Input(shape=(10,32)) cc1 = concatenate([inp1, inp2],axis=1) output = Dense(30, activation='relu')(cc1) model = Model(inputs=[inp1, inp2], outputs=output) model.summary()
Anda dapat melihat notebook di sini untuk detailnya: https://nbviewer.jupyter.org/github/anhhh11/DeepLearning/blob/master/Concanate_two_layer_keras.ipynb
sumber
Concatenate()
danconcatenate()
lapisan di Keras?