Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

compatibility to latest sklearn, tf, np versions #30

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 9 additions & 10 deletions DEC.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,12 @@

from time import time
import numpy as np
import keras.backend as K
from keras.engine.topology import Layer, InputSpec
from keras.layers import Dense, Input
from keras.models import Model
from keras.optimizers import SGD
from keras import callbacks
from keras.initializers import VarianceScaling
import tensorflow.keras.backend as K
from tensorflow.keras.layers import Layer, InputSpec, Dense, Input
from tensorflow.keras.models import Model
from tensorflow.keras.optimizers import SGD
from tensorflow.keras import callbacks
from tensorflow.keras.initializers import VarianceScaling
from sklearn.cluster import KMeans
import metrics

Expand Down Expand Up @@ -158,7 +157,7 @@ def on_epoch_end(self, epoch, logs=None):
self.model.get_layer(
'encoder_%d' % (int(len(self.model.layers) / 2) - 1)).output)
features = feature_model.predict(self.x)
km = KMeans(n_clusters=len(np.unique(self.y)), n_init=20, n_jobs=4)
km = KMeans(n_clusters=len(np.unique(self.y)), n_init=20)
y_pred = km.fit_predict(features)
# print()
print(' '*8 + '|==> acc: %.4f, nmi: %.4f <==|'
Expand Down Expand Up @@ -298,13 +297,13 @@ def fit(self, x, y=None, maxiter=2e4, batch_size=256, tol=1e-3,
pretrain_epochs = 300
init = VarianceScaling(scale=1. / 3., mode='fan_in',
distribution='uniform') # [-limit, limit], limit=sqrt(1./fan_in)
pretrain_optimizer = SGD(lr=1, momentum=0.9)
pretrain_optimizer = SGD(learning_rate=1, momentum=0.9)
elif args.dataset == 'reuters10k':
update_interval = 30
pretrain_epochs = 50
init = VarianceScaling(scale=1. / 3., mode='fan_in',
distribution='uniform') # [-limit, limit], limit=sqrt(1./fan_in)
pretrain_optimizer = SGD(lr=1, momentum=0.9)
pretrain_optimizer = SGD(learning_rate=1, momentum=0.9)
elif args.dataset == 'usps':
update_interval = 30
pretrain_epochs = 50
Expand Down
22 changes: 11 additions & 11 deletions datasets.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@


def extract_vgg16_features(x):
from keras.preprocessing.image import img_to_array, array_to_img
from keras.applications.vgg16 import preprocess_input, VGG16
from keras.models import Model
from tensorflow.keras.preprocessing.image import img_to_array, array_to_img
from tensorflow.keras.applications.vgg16 import preprocess_input, VGG16
from tensorflow.keras.models import Model

# im_h = x.shape[1]
im_h = 224
Expand Down Expand Up @@ -93,7 +93,7 @@ def make_reuters_data(data_dir):

def load_mnist():
# the data, shuffled and split between train and test sets
from keras.datasets import mnist
from tensorflow.keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x = np.concatenate((x_train, x_test))
y = np.concatenate((y_train, y_test))
Expand All @@ -104,7 +104,7 @@ def load_mnist():


def load_fashion_mnist():
from keras.datasets import fashion_mnist # this requires keras>=2.0.9
from tensorflow.keras.datasets import fashion_mnist # this requires keras>=2.0.9
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
x = np.concatenate((x_train, x_test))
y = np.concatenate((y_train, y_test))
Expand Down Expand Up @@ -179,7 +179,7 @@ def load_reuters(data_path='./data/reuters'):
print('making reuters idf features')
make_reuters_data(data_path)
print(('reutersidf saved to ' + data_path))
data = np.load(os.path.join(data_path, 'reutersidf10k.npy')).item()
data = np.load(os.path.join(data_path, 'reutersidf10k.npy'), allow_pickle=True).item()
# has been shuffled
x = data['data']
y = data['label']
Expand All @@ -190,8 +190,8 @@ def load_reuters(data_path='./data/reuters'):


def load_retures_keras():
from keras.preprocessing.text import Tokenizer
from keras.datasets import reuters
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.datasets import reuters
max_words = 1000

print('Loading data...')
Expand All @@ -210,8 +210,8 @@ def load_retures_keras():


def load_imdb():
from keras.preprocessing.text import Tokenizer
from keras.datasets import imdb
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.datasets import imdb
max_words = 1000

print('Loading data...')
Expand Down Expand Up @@ -246,7 +246,7 @@ def load_newsgroups():


def load_cifar10(data_path='./data/cifar10'):
from keras.datasets import cifar10
from tensorflow.keras.datasets import cifar10
(train_x, train_y), (test_x, test_y) = cifar10.load_data()
x = np.concatenate((train_x, test_x))
y = np.concatenate((train_y, test_y)).reshape((60000,))
Expand Down
6 changes: 3 additions & 3 deletions metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,6 @@ def acc(y_true, y_pred):
w = np.zeros((D, D), dtype=np.int64)
for i in range(y_pred.size):
w[y_pred[i], y_true[i]] += 1
from sklearn.utils.linear_assignment_ import linear_assignment
ind = linear_assignment(w.max() - w)
return sum([w[i, j] for i, j in ind]) * 1.0 / y_pred.size
from scipy.optimize import linear_sum_assignment
ind = linear_sum_assignment(np.amax(w) - w)
return sum([w[i, j] for i, j in zip(*ind)]) * 1.0 / y_pred.size
9 changes: 4 additions & 5 deletions run_exp.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
from DEC import DEC
import os, csv
import datasets
from keras.optimizers import SGD
from keras.initializers import VarianceScaling
from tensorflow.keras.optimizers import SGD
from tensorflow.keras.initializers import VarianceScaling
import numpy as np

expdir='./results/exp1'
Expand Down Expand Up @@ -34,13 +33,13 @@
pretrain_epochs = 300
init = VarianceScaling(scale=1. / 3., mode='fan_in',
distribution='uniform') # [-limit, limit], limit=sqrt(1./fan_in)
pretrain_optimizer = SGD(lr=1, momentum=0.9)
pretrain_optimizer = SGD(learning_rate=1, momentum=0.9)
elif db == 'reuters10k':
update_interval = 30
pretrain_epochs = 50
init = VarianceScaling(scale=1. / 3., mode='fan_in',
distribution='uniform') # [-limit, limit], limit=sqrt(1./fan_in)
pretrain_optimizer = SGD(lr=1, momentum=0.9)
pretrain_optimizer = SGD(learning_rate=1, momentum=0.9)
elif db == 'usps':
update_interval = 30
pretrain_epochs = 50
Expand Down