Я пытаюсь сконструировать автоматический кодер для классификации активности для 3-канального ввода (данные трехосного акселерометра).
Входной тензор имеет форму [None,200,3]
([Размер партии, размер окна, количество каналов]), и на первом уровне я хочу просто уменьшить размер входного слоя до [None,150,3]
. Вот код для создания заполнителей и первого слоя:
import tensorflow as tf
def denseLayer(inputVal,weight,bias):
return tf.nn.relu((tf.matmul(inputVal,weight)+bias))
x = tf.placeholder(dtype=tf.float32,shape=[None,200,3]) #Input tensor
wIn = tf.get_variable(name='wIn',initializer=tf.truncated_normal(stddev=0.1,dtype=tf.float32,shape=[200,150]))
bIn = tf.get_variable(name='bIn',initializer=tf.constant(value = 0.1,shape=[150,3],dtype=tf.float32))
firstLayer = denseLayer(x,weight=wIn,bias=bIn)
Этот код, конечно, приведет к ошибке (из-за разницы в ранге между x
и wIn
), и я не могу определить форму wIn
переменной для получить желаемую форму firstLayer
, то есть [None,150,3]
.
Вот как должна выглядеть конечная сеть (упрощенная версия с меньшими слоями):