challenging-america-year-pr.../keras_lstm/predict.py
2021-06-10 08:45:46 +02:00

87 lines
2.8 KiB
Python

import tensorflow as tf
import pickle
import os
gpus = tf.config.experimental.list_physical_devices('GPU')
for gpu in gpus:
tf.config.experimental.set_memory_growth(gpu, True)
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint
import numpy as np
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Activation, Dropout, Dense
from tensorflow.keras.layers import Embedding
import sys
from tensorflow.keras.layers import MaxPooling1D, GlobalMaxPooling2D, LSTM, Bidirectional
from sklearn.utils import shuffle
vocab_size = int(sys.argv[1])
embedding_size = int(sys.argv[2])
LSTM_SIZE = int(sys.argv[3])
DROPOUT_LSTM = float(sys.argv[4])
DROPOUT_REGULAR = float(sys.argv[5])
BATCH_SIZE = int(sys.argv[6])
checkpoints = sys.argv[7]
#p1 = float(sys.argv[3])
#p2 = float(sys.argv[4])
train_year = [float(a.rstrip('\n')) for a in open('../train/expected.tsv','r')]
max_year = max(train_year)
min_year = min(train_year)
train_text_tokenized= pickle.load(open('train_text_30k_for_keras.pickle', 'rb'))
maxlen = max([len(a) for a in train_text_tokenized])
tokenizer = pickle.load(open('tokenizer.pickle','rb'))
test_text_tokenized = [a.rstrip('\n') for a in open('../test-A/in.tsv', 'r')]
test_text_tokenized = tokenizer.texts_to_sequences(test_text_tokenized)
test_text_tokenized = pad_sequences(test_text_tokenized, padding='post', maxlen=maxlen)
eval_year = [float(a.rstrip()) for a in open('../dev-0/expected.tsv','r')]
maxlen = max([len(a) for a in train_text_tokenized])
model = Sequential()
embedding_layer = Embedding(vocab_size, embedding_size, input_length=maxlen , trainable=True)
model.add(embedding_layer)
#model.add(Bidirectional(LSTM(LSTM_SIZE, dropout = DROPOUT_LSTM, return_sequences=True)))
model.add(Bidirectional(LSTM(LSTM_SIZE, dropout = DROPOUT_LSTM)))
model.add(Dropout(DROPOUT_REGULAR))
model.add(Dense(1, activation='linear'))
model_checkpoint = sorted(os.listdir(checkpoints))[-1]
model.load_weights('checkpoints/saved-model-000005-0.00.hdf5','rb')
scaler = pickle.load(open('minmaxscaler.pickle', 'rb'))
# EVAL PREDS
eval_text_tokenized = pickle.load(open('eval_text_30k_for_keras.pickle', 'rb'))
eval_preds = scaler.inverse_transform(model.predict(eval_text_tokenized, batch_size=20))
eval_preds = np.minimum(eval_preds, max_year)
eval_preds = np.maximum(eval_preds, min_year)
f = open('../dev-0/out.tsv', 'w')
for i in eval_preds:
f.write(str(i[0]) + '\n')
f.close()
# TEST PREDS
test_preds = scaler.inverse_transform(model.predict(test_text_tokenized, batch_size=20))
test_preds = np.minimum(test_preds, max_year)
test_preds = np.maximum(test_preds, min_year)
f = open('../test-A/out.tsv', 'w')
for i in test_preds:
f.write(str(i[0]) + '\n')
f.close()