【发布时间】:2018-01-19 06:20:09
【问题描述】:
我有一个这样的多输出模型
input
|
hidden
|
/ \
/ \
output1 output2
我可以通过model.train_on_batch(input=input,output=[output1,output2]) 训练这个模型,但是在我训练的某个特定阶段,我只想训练这个模型的一个分支(输出 2)并防止输出 1 的反向传播。我最初尝试在模型 model.train_on_batch(input=input,output=[None,output2]) 中传递 None 值,但它的显示
AttributeError: 'NoneType' 对象没有属性 'shape'
然后我尝试传递一个输出 1 形状 model.train_on_batch(input=input,output=[Nan_array,output2]) 的 NaN 数组,然后损失变为 NaN。如何在多输出 keras 模型中只训练一个分支并防止另一个分支的反向传播?
编辑
我试图找到解决此问题的方法并遇到了K.stop_gradient 函数。我试图在这样的一个输出模型中停止反向传播
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout
import keras.backend as K
def loss(y_true, y_pred):
return K.stop_gradient(y_pred)
# Generate dummy data
x_train = np.random.random((10, 20))
y_train = np.random.randint(2, size=(10, 1))
x_test = np.random.random((10, 20))
y_test = np.random.randint(2, size=(10, 1))
model = Sequential()
model.add(Dense(64, input_dim=20, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss=loss,
optimizer='rmsprop',
metrics=['accuracy'])
model.fit(x_train, y_train,
epochs=1,
batch_size=128)
score = model.evaluate(x_test, y_test, batch_size=128)
但是得到这个错误
ValueError: 试图将 'x' 转换为张量并失败。错误:不支持任何值。
【问题讨论】:
-
你试过只是传递
model.train_on_batch(input=input,output=output2)吗? -
它会抛出这个错误
Expected to see 2 arrays but instead got the following list of 1 arrays:
标签: python tensorflow keras keras-layer