DeepLearning / / 2022. 10. 28. 15:49

DeepLearning - XOR문제 Greedy Layer-wise 트레이닝으로 풀기

 

''''''XOR문제 GREEDY Layer-wise 트레이닝으로 풀기'''

xor = {'x1':[0,0,1,1], 'x2':[0,1,0,1], 'y':[0,1,1,0]}
XOR = pd.DataFrame(xor)
X = XOR.drop('y', axis=1)
y = XOR.y
model = Sequential()
model.add(Dense(2, input_dim=2, activation='elu'))
model.add(Dense(1, activation='linear'))
fore_weights = model.get_weights()
fore12 = Sequential()
fore12.add(Dense(2, input_dim=2, activation='elu'))
z_pred = fore12.predict(X)
back21 = Sequential()
back21.add(Dense(2, input_dim=2, activation='sigmoid'))
back21_weights = back21.get_weights()
back21_weights[0][0][0] = fore12.get_weights()[0][0][0]
back21_weights[0][1][0] = fore12.get_weights()[0][0][1]
back21_weights[0][0][1] = fore12.get_weights()[0][1][0]
back21_weights[0][1][1] = fore12.get_weights()[0][1][1]
back21.set_weights(back21_weights)
back21.compile(loss='binary_crossentropy', optimizer='adam')
back21.fit(z_pred, X, epochs=3000, verbose=0)
X_pred = back21.predict(z_pred)
print(X_pred)
print(z_pred)

print(fore12.predict(X_pred))
print(z_pred)
print(back21.predict(z_pred))
print(X_pred)

back32 = Sequential()
back32.add(Dense(2, input_dim=1, activation='elu'))
back32.compile(loss='binary_crossentropy', optimizer='adam')
back32.fit(y, z_pred, epochs=3000, verbose=0)
z_pred1 = back32.predict(y)
z_pred1

for _ in range(20):
    fore23 = Sequential()
    fore23.add(Dense(1, input_dim=2, activation='sigmoid'))
    fore23.set_weights([back32.get_weights()[0].reshape(2,1), np.array([0.])])
    fore23.compile(loss='binary_crossentropy', optimizer='adam')
    y_pred = fore23.predict(z_pred1)
    fore23.fit(z_pred1, y_pred, epochs=3000, verbose=0)
    print(y_pred)
    print(z_pred1)
    back32 = Sequential()
    back32.add(Dense(2, input_dim=1, activation='elu'))
    back32.set_weights([fore23.get_weights()[0].reshape(1,2), np.array([0., 0.])])
    back32.compile(loss='binary_crossentropy', optimizer='adam')
    back32.fit(y_pred, z_pred1, epochs=3000, verbose=0)
    z_pred1 = back32.predict(y_pred)
    print(z_pred1)
    print(y_pred)

print(fore23.predict(z_pred1))
print(y_pred)
print(back32.predict(y_pred))
print(z_pred1)

final_weights = model.get_weights()
final_weights[0] = fore12.get_weights()[0]
final_weights[1] = fore12.get_weights()[1]
final_weights[2] = fore23.get_weights()[0]
final_weights[3] = fore23.get_weights()[1]
final_weights

model = Sequential()
model.add(Dense(2, input_dim=2, activation='elu'))
model.add(Dense(1, activation='sigmoid'))
model.set_weights(final_weights)
model.compile(loss='mse', optimizer='adam')
model.fit(X, y, epochs=3000, verbose=0)
print(model.predict(X)) 

model = Sequential()
model.add(Dense(2, input_dim=2, activation='elu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='mse', optimizer='adam')
model.fit(X, y, epochs=3000, verbose=0)
print(model.predict(X))
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유