Source code for elliot.recommender.visual_recommenders.DVBPR.FeatureExtractor
import os
import random
from abc import ABC
import numpy as np
import tensorflow as tf
random.seed(0)
np.random.seed(0)
tf.random.set_seed(0)
os.environ['TF_FORCE_GPU_ALLOW_GROWTH'] = 'true'
[docs]class FeatureExtractor(tf.keras.Model, ABC):
def __init__(self, k):
super(FeatureExtractor, self).__init__()
self.conv1 = tf.keras.layers.Conv2D(filters=64, kernel_size=(11, 11), strides=(4, 4), padding='same')
self.relu1 = tf.keras.layers.ReLU()
self.max1 = tf.keras.layers.MaxPool2D(padding='same')
self.conv2 = tf.keras.layers.Conv2D(filters=256, kernel_size=(5, 5), padding='same')
self.relu2 = tf.keras.layers.ReLU()
self.max2 = tf.keras.layers.MaxPool2D(padding='same')
self.conv3 = tf.keras.layers.Conv2D(filters=256, kernel_size=(3, 3), padding='same')
self.relu3 = tf.keras.layers.ReLU()
self.conv4 = tf.keras.layers.Conv2D(filters=256, kernel_size=(3, 3), padding='same')
self.relu4 = tf.keras.layers.ReLU()
self.conv5 = tf.keras.layers.Conv2D(filters=256, kernel_size=(3, 3), padding='same')
self.relu5 = tf.keras.layers.ReLU()
self.max5 = tf.keras.layers.MaxPool2D(padding='same')
self.flatten = tf.keras.layers.Flatten()
self.f6 = tf.keras.layers.Dense(units=4096)
self.relu6 = tf.keras.layers.ReLU()
self.dropout6 = tf.keras.layers.Dropout(rate=0.5)
self.f7 = tf.keras.layers.Dense(units=4096)
self.relu7 = tf.keras.layers.ReLU()
self.dropout7 = tf.keras.layers.Dropout(rate=0.5)
self.f8 = tf.keras.layers.Dense(units=k)
self.build((None, 224, 224, 3))
[docs] def call(self, inputs, training=None, mask=None):
conv1 = self.conv1(inputs)
conv1 = self.relu1(conv1)
conv1 = self.max1(conv1)
conv2 = self.conv2(conv1)
conv2 = self.relu2(conv2)
conv2 = self.max2(conv2)
conv3 = self.conv3(conv2)
conv3 = self.relu3(conv3)
conv4 = self.conv4(conv3)
conv4 = self.relu4(conv4)
conv5 = self.conv5(conv4)
conv5 = self.relu5(conv5)
conv5 = self.max5(conv5)
fc1 = self.flatten(conv5)
fc1 = self.f6(fc1)
fc1 = self.relu6(fc1)
fc1 = self.dropout6(inputs=fc1, training=training)
fc2 = self.f7(fc1)
fc2 = self.relu7(fc2)
fc2 = self.dropout7(inputs=fc2, training=training)
fc3 = self.f8(fc2)
return fc3