테라스 플로우 백엔드가있는 Keras 순차 모델을 사용하여 RNN을 만들고 싶습니다. 나는 다음과 같은 코드를 구현할 때 :reshape에 대한 입력은 2 * "batch_size"값을 갖는 텐서이지만 요청 된 모양에는 "batch_size"가 있습니다
batch_size = 8
batch_inputshape = (batch_size,x_train.shape[1],x_train.shape[2])
print(batch_inputshape) #(8, 600, 103)
model = Sequential()
model.add(LSTM(103,
batch_input_shape = batch_inputshape,
return_sequences = True,
stateful = True))
model.add(Dropout(0.2))
model.add(LSTM(50,
return_sequences = True,
stateful = True))
model.add(Dropout(0.2))
model.add(TimeDistributed(Dense(10)))
model.add(TimeDistributed(Dense(2)))
model.add(Activation('softmax'))
model.compile(loss= ncce, optimizer='adam')
print (model.output_shape) #(8, 600, 2)
model.fit(x_train,y_train, batch_size = batch_size,
nb_epoch = 1, validation_split=0.25)
을 나는 다음과 오류 메시지가 얻을 : 바꿀 수
입력 (16 개) 값으로 텐서입니다 만, 요청 된 형태는 8
그러나 어떤 I있다 batch_size를 다음 수식을 따르기 만하면됩니다 :
변형 입력은 2 * batch_size
값을 가진 텐서이지만 요청 된 sha pe가있다 batch_size
내가 다른 Q&A를 보았다. 그러나 나는 그들이 나를 많이 도와주지 않는다고 생각한다. 아니면 나는 해답을 충분히 이해하지 못한다.
도움이 될 것입니다.
EDIT : 입력 대상의 형상 요청한 :
print(x_train.shape) #(512,600,103)
print(y_train.shape) #(512,600,2)
EDIT 2
from functools import partial
import keras.backend as K
from itertools import product
def w_categorical_crossentropy(y_true, y_pred, weights):
# https://github.com/fchollet/keras/issues/2115#issuecomment-274101310 #
nb_cl = len(weights)
final_mask = K.zeros_like(y_pred[:, 0])
y_pred_max = K.max(y_pred, axis=1)
y_pred_max = K.reshape(y_pred_max, (K.shape(y_pred)[0], 1))
y_pred_max_mat = K.cast(K.equal(y_pred, y_pred_max), K.floatx())
for c_p, c_t in product(range(nb_cl), range(nb_cl)):
final_mask += (weights[c_t, c_p] * y_pred_max_mat[:, c_p] * y_true[:, c_t])
return K.categorical_crossentropy(y_pred, y_true) * final_mask
w_array = np.ones((2,2))
w_array[1, 0] = 100
print(w_array)
ncce = partial(w_categorical_crossentropy, weights=w_array)
ncce.__name__ ='w_categorical_crossentropy
EDIT 3 @Nassim 벤 도움 UPDATE
을 그는 문제가 손실 기능에 있다는 것을 알아 냈습니다. 그는 정기적 인 손실 함수를 사용하여 코드를 게시 한 다음 정상적으로 작동합니다. 그러나 사용자 지정 손실 기능을 사용하면 코드가 작동하지 않습니다. 이 질문에 대한 독자라면 위의 내 costum 손실 함수를 게시 한 것을 볼 수 있으며 문제가 있습니다. 현재 나는 왜이 오류가 존재하는지 아직 모르지만 이것은 현재 상태입니다.
귀하의 최대 기능을 적용하고 싶은 귀하의 커스텀 손실에서? 치수 또는 피처 치수를 순서 지정 하시겠습니까? –
내 게시물이 업데이트되었으므로 지금 작동합니다. 내 편에서 일하고있다 –