我撰寫了以下多輸入 Keras TensorFlow 模型:
CHARPROTLEN = 25 #size of vocab
CHARCANSMILEN = 62 #size of vocab
protein_input = Input(shape=(train_protein.shape[1:]))
compound_input = Input(shape=(train_smile.shape[1:]))
#protein layers
x = Embedding(input_dim=CHARPROTLEN 1,output_dim=128, input_length=maximum_amino_acid_sequence_length) (protein_input)
x = Conv1D(filters=32, padding="valid", activation="relu", strides=1, kernel_size=4)(x)
x = Conv1D(filters=64, padding="valid", activation="relu", strides=1, kernel_size=8)(x)
x = Conv1D(filters=96, padding="valid", activation="relu", strides=1, kernel_size=12)(x)
final_protein = GlobalMaxPooling1D()(x)
#compound layers
y = Embedding(input_dim=CHARCANSMISET 1,output_dim=128, input_length=maximum_SMILES_length) (compound_input)
y = Conv1D(filters=32, padding="valid", activation="relu", strides=1, kernel_size=4)(y)
y = Conv1D(filters=64, padding="valid", activation="relu", strides=1, kernel_size=6)(y)
y = Conv1D(filters=96, padding="valid", activation="relu", strides=1, kernel_size=8)(y)
final_compound = GlobalMaxPooling1D()(y)
join = tf.keras.layers.concatenate([final_protein, final_compound], axis=-1)
x = Dense(1024, activation="relu")(join)
x = Dropout(0.1)(x)
x = Dense(1024, activation='relu')(x)
x = Dropout(0.1)(x)
x = Dense(512, activation='relu')(x)
predictions = Dense(1,kernel_initializer='normal')(x)
model = Model(inputs=[protein_input, compound_input], outputs=[predictions])
輸入具有以下形狀:
train_protein.shape
TensorShape([5411, 1500, 1])
train_smile.shape
TensorShape([5411, 100, 1])
我收到以下錯誤訊息:
ValueError: One of the dimensions in the output is <= 0 due to downsampling in conv1d. Consider increasing the input size. Received input shape [None, 1500, 1, 128] which would produce output shape with a zero or negative value in a dimension.
這是由于Embedding圖層不正確output_dim嗎?我該如何糾正?謝謝。
uj5u.com熱心網友回復:
一個Conv1D層需要輸入 shape (batch_size, timesteps, features),train_protein并且train_smile已經有了。例如,train_protein由 5411 個樣本組成,其中每個樣本有 1500 個時間步長,每個時間步長一個特征。將Embedding圖層應用到它們會導致添加一個額外的維度,而這些維度是Conv1D圖層無法使用的。
你有兩個選擇。您要么Embedding完全省略圖層并將輸入直接提供給Conv1D圖層,要么將資料重塑為(5411, 1500)fortrain_protein和(5411, 100)for train_smile。您可以使用tf.reshape、tf.squeeze或tf.keras.layers.Reshape來重塑資料。之后,您可以Embedding按計劃使用該圖層。請注意,它output_dim決定了每個時間步將映射到的 n 維向量。另請參見this和this。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/406126.html
標籤:
