Прежде чем я объясню, вот соответствующий фрагмент кода:
input = Input(shape=(784, ))
hidden1 = Dense(784, activation='relu')(input)
hidden2 = Dense(784, activation='relu')(hidden1)
hidden3 = Dense(1568, activation='relu')(hidden2)
hidden4 = Lambda(lambda x: makeComplex(x))(hidden3)
hidden5 = Reshape((1, 28, 28))(hidden4)
hidden6 = Lambda(lambda x: ifft2(x))(hidden5)
hidden7 = Flatten()(hidden6)
output = Dense(train_targets.shape[1], activation='linear')(hidden7)
model = Model(inputs=input, outputs=output)
print(model.summary())
, где ifft2 (x) равно
def ifft2(x):
import tensorflow as tf
return tf.cast(tf.spectral.ifft2d(tf.cast(x,dtype=tf.complex64)),tf.float32)
Теперь моя цель - реализовать метод makeComplex.
По сути, он получает вектор размером 1568, и я хочу, чтобы он возвращал вектор размера 784 следующим очень простым способом:
new[k] = old[k] + old[k + 1] * i
, где i
- мнимая единица
Вот моя попытка:
def makeComplex(x):
y = np.zeros((1, 784))
for i in range(784):
y[i] = np.complex(x[i], x[i + 1])
return y
Конечно, это не работает, потому что x на самом деле не вектор, а тензор тензора.Что-то, о чем я ничего не знаю.Как я могу сделать эту работу?