我编写了以下Keras模型:
input = Input(shape=(train.shape[1:]))x = layers.Conv1D(filters=32, padding="valid", activation="relu", strides=1, kernel_size=1)(input)x = layers.Conv1D(filters=32, padding="valid", activation="relu", strides=1, kernel_size=1)(x)x = layers.Conv1D(filters=32, padding="valid", activation="relu", strides=1, kernel_size=1)(x)x = layers.GlobalMaxPooling1D()(x)x = layers.Dense(1024, activation="relu")(x)x = layers.Dropout(0.1)(x)x = layers.Dense(1024, activation='relu')(x)x = layers.Dropout(0.1)(x)predictions = layers.Dense(1,kernel_initializer='normal')(x)model = tf.keras.Model(inputs=[protein_input], outputs=[predictions])plot_model(model,"model.png", show_dtype=True, show_shapes=True, show_layer_names=True)model.summary()
这会生成以下表格:
_________________________________________________________________Layer (type) Output Shape Param # =================================================================Total params: 1,086,593Trainable params: 1,086,593Non-trainable params: 0_________________________________________________________________
plot_model()
同样没有生成图表。
模型可以编译,并且我可以运行 model.fit
。
model.compile(loss=tf.keras.losses.MeanSquaredError(), optimizer="adam", metrics=['mean_absolute_error'])epochs=100history = model.fit(x=[train],y=log_training_Kd_labels, validation_data=([val],log_validation_Kd_labels), epochs=epochs, batch_size=100)
但我不确定是否有任何学习在发生。谁能告诉我这是为什么?
回答:
你可能混用了Keras和TensorFlow库。由于TensorFlow实现了Keras库,这种混用是开发者常犯的错误,他们同时导入Keras和TensorFlow,并随机使用它们,这会导致一些奇怪的行为。
在整个代码中只使用 import tensorflow.keras
或 import keras
即可。
例如,如果我这样编码(随机使用两个库):
import keras #导入kerasimport tensorflow as tffrom tensorflow.keras.layers import Dense #从tensorflow.keras导入层from tensorflow.keras import Inputinput = Input(shape = (20,))x = Dense(30, name = 'dense1')(input)x = Dense(20, name = 'dense2')(x)output = Dense(1)(x)model = keras.models.Model(inputs = input ,outputs = output)model.compile(loss = 'mse', optimizer = 'adam')model.summary()
输出将是:
Model: "model"_________________________________________________________________Layer (type) Output Shape Param # =================================================================Total params: 1,271Trainable params: 1,271Non-trainable params: 0_________________________________________________________________
但如果我修改导入方式,只使用 tensorflow.keras
而不使用 keras
,像这样:
import tensorflow as tffrom tensorflow.keras.layers import Densefrom tensorflow.keras import Inputfrom tensorflow.keras.models import Modelinput = Input(shape = (20,))x = Dense(30, name = 'dense1')(input)x = Dense(20, name = 'dense2')(x)output = Dense(1)(x)model = Model(inputs = input ,outputs = output)model.compile(loss = 'mse', optimizer = 'adam')model.summary()
我将得到这样的输出:
Model: "model"_________________________________________________________________Layer (type) Output Shape Param # =================================================================input_3 (InputLayer) [(None, 20)] 0 _________________________________________________________________dense1 (Dense) (None, 30) 630 _________________________________________________________________dense2 (Dense) (None, 20) 620 _________________________________________________________________dense_2 (Dense) (None, 1) 21 =================================================================Total params: 1,271Trainable params: 1,271Non-trainable params: 0_________________________________________________________________