У меня есть автоматический кодер, подобный нейронной сети, который я кодировал, и 9000 примеров обучения. У меня также есть numpy ndarray с 9000 массивами. Моя цель состоит в том, чтобы t ie активаций (не весов) среднего слоя (который преобразован в размер одного из массивов в группе 9000). Я хотел бы, чтобы я случайно инициализировал массив numpy. Затем, используя размер пакета 9000 ... усредните значения между активацией конкретных обучающих примеров в среднем слое и связанным с ним массивом из 9000 в массиве numpy.
numpy ndarray должен использоваться в другом месте программы после обучения.
Так вот, что должно произойти, если у нас будет 1 пример обучения, тогда у нас может быть массив numpy, представляющий собой (1,240,5) и представление ( активаций) в среднем слое нейронной сети после прямого распространения становятся (1,240,5). поэтому для каждой записи в numpy ndarray есть нейрон. Учитывая, что после первого прямого прохода активации будут преобразованы в ndarray той же формы, что и массив numpy, я бы хотел усреднить значения тех, которые уже найдены в массиве numpy, и тех, которые появились после первый проход вперед.
, так как обучение продолжается на этом одном примере обучения, активации будут меняться, и я хотел бы продолжать усреднять значения на каждой итерации, пока обучение не будет завершено.
это более сложный в примере с 9000 обучающими примерами, где каждый пример после первого прохода имеет отдельный массив активации и должен быть усреднен со своим собственным внешним массивом numpy.
Опять же, внешний массив numpy не является часть нейронной сети, хотя ее окончательные значения будут зависеть от процедуры обучения.
Я использую keras.
, поэтому код может быть примерно таким, возможно, используя model.metrics_tensors и минибат 1. 1. 1015 *
a=np.random.rand(9000, 240, 5)
Mirror=(Dense(240*5))
model = Sequential()
model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(MaxPooling2D(pool_size=(2, 2))) #7 x 7 x 64
model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(Flatten())
model.add(Mirror)
#decoder
model.add(Conv2D(128, (3, 3), activation='relu', padding='same'))
model.add(UpSampling2D((2,2))) # 14 x 14 x 128
model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(UpSampling2D((2,2))) # 28 x 28 x 64
model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
model.compile(optimizer="adadelta", loss='mse',metrics=["accuracy"])
output_layers= ['Mirror']
model.metrics_names += 'Mirror'
model.metrics_tensors = [Mirror]
x=[layer.output for layer in model.layers if layer.name in output_layers]
del x[0]
x=np.asarray(x)
x=np.flatten(x)
x=np.ndarray.reshape(x,(1,240,5))
tf.keras.layers.average(x,a[0:1,:,:])