У меня есть сеть в кератах, и я пытаюсь создать слой, имитирующий JPEG-атаку.Я посылаю тензор на этот слой и затем пытаюсь выполнить DCT и IDCT, но он выдает эту ошибку:
Трассировка (последний вызов был последним):
Файл "", строка122, in decoded_noise = JPEGLayer () (декодированный) # 16
Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ engine \ base_layer.py", строка 457,в вызов output = self.call (входные данные, ** kwargs)
Файл "", строка 94, в шуме возврата вызова ()
Файл "", строка88, в шуме slicAndJpeg (noised_image_pad)
Файл "", строка 66, в slicAndJpeg DCT (temp, tempb)
Файл "", строка 40, в DCT b [u, v]= b [u, v] + 0,25 * C (u) * C (v) * a [x, y] * np.cos ((2 * x + 1) * (u) * np.pi / 16) *np.cos ((2 * y + 1) * (v) * np.pi / 16)
ValueError: установка элемента массива с последовательностью.
но я делаюне знаю, где я могу произвести последовательность?эта проблема из-за тензоров вместо numpyarray?Я действительно не мог найти решение этого.не могли бы вы сказать мне ваше предложение?Спасибо.
from keras.layers import Input, Concatenate, GaussianNoise,Cropping2D,Activation,Dropout,BatchNormalization,MaxPool2D,AveragePooling2D,ZeroPadding2D
from keras.layers import Conv2D, AtrousConv2D
from keras.models import Model
from keras.datasets import mnist
from keras.callbacks import TensorBoard
from keras import backend as K
from keras import layers
import matplotlib.pyplot as plt
import tensorflow as tf
import keras as Kr
from keras.optimizers import SGD,RMSprop,Adam
from keras.callbacks import ReduceLROnPlateau
from keras.callbacks import EarlyStopping
from keras.callbacks import ModelCheckpoint
import numpy as np
import pylab as pl
import matplotlib.cm as cm
import keract
from matplotlib import pyplot
from keras import optimizers
from keras import regularizers
from tensorflow.python.keras.layers import Lambda;
from keras.engine.topology import Layer
def C(u):
if u == 0:
return 1. / np.sqrt(2.)
else:
return 1.
def DCT(a, b):
for u in range(8):
for v in range(8):
for x in range(8):
for y in range(8):
b[u,v] = b[u, v] + 0.25 * C(u) * C(v) * a[x, y]* np.cos((2 * x+1) * (u) * np.pi / 16) * np.cos((2 * y+1) * (v) * np.pi / 16)
def IDCT(a, b):
for u in range(8):
for v in range(8):
for x in range(8):
for y in range(8):
b[x,y] = b[x, y] + 0.25 * C(u) * C(v) * a[u,v] * np.cos((2 * x+1) * (u) * np.pi / 16) * np.cos((2 * y+1) * (v) * np.pi / 16)
def quntize_mask(window_size: int, keep_count: int):
mask = np.zeros((window_size, window_size), dtype=np.uint8)
index_order = sorted(((x, y) for x in range(window_size) for y in range(window_size)),
key=lambda p: (p[0] + p[1], -p[1] if (p[0] + p[1]) % 2 else p[1]))
for i, j in index_order[0:keep_count]:
mask[i, j] = 1
return mask
def slicAndJpeg(img):
for i in range (int(img.shape[1].value/8)):
for j in range(int(img.shape[2].value/8)):
temp=(img[:,i*8:i*8+8,j*8:j*8+8])
tempb=np.zeros((8,8))
DCT(temp,tempb)
mask=quntize_mask(8,9)
qunz=Kr.layers.multiply(mask,tempb)
tempc=K.zeros((8,8))
IDCT(qunz,tempc)
img[:,i*8:i*8+8,j*8:j*8+8]=tempc
class JPEGLayer(Layer):
def __init__(self,**kwargs):
super(JPEGLayer, self).__init__(**kwargs)
self.supports_masking = True
def call(self, noised_image, training=True):
def noise():
# noised_image = noised_and_cover
# pad the image so that we can do dct on 8x8 blocks
pad_height = (8 - noised_image.shape[1] % 8) % 8
pad_width = (8 - noised_image.shape[2] % 8) % 8
noised_image_pad = Kr.layers.ZeroPadding2D(padding=(( pad_width, 0),( pad_height,0)))(noised_image)
slicAndJpeg(noised_image_pad)
# un-pad
noised_and_cover = noised_image_pad[ :, :noised_image_pad.shape[1]-pad_height, :noised_image_pad.shape[2]-pad_width]
return noised_and_cover
return noise()
#-----------------building w train---------------------------------------------
wt_random=np.random.randint(2, size=(49999,4,4))
w_expand=wt_random.astype(np.float32)
wv_random=np.random.randint(2, size=(9999,4,4))
wv_expand=wv_random.astype(np.float32)
x,y,z=w_expand.shape
w_expand=w_expand.reshape((x,y,z,1))
x,y,z=wv_expand.shape
wv_expand=wv_expand.reshape((x,y,z,1))
#-----------------building w test---------------------------------------------
w_test = np.random.randint(2,size=(1,4,4))
w_test=w_test.astype(np.float32)
w_test=w_test.reshape((1,4,4,1))
#-----------------------encoder------------------------------------------------
#------------------------------------------------------------------------------
image = Input((28, 28, 1))
conv1 = Conv2D(64, (5, 5),activation='relu',padding='same', name='convl1e')(image)
wtm=Input((4,4,1))
#--------------------------------------------------------------
wpad=Kr.layers.Lambda(lambda xy: xy[0] + Kr.backend.spatial_2d_padding(xy[1], padding=((0, 24), (0, 24))))
encoded_merged=wpad([conv1,wtm])#-----------------------decoder------------------------------------------------
#------------------------------------------------------------------------------
decoded = Conv2D(1, (5, 5),activation='relu', padding='same', name='decoder_output')(encoded_merged)
decoded_noise=JPEGLayer()(decoded)#16
#----------------------w extraction------------------------------------
convw1 = Conv2D(64, (5,5),activation='relu' , name='conl1w')(decoded_noise)#24
convw2 = Conv2D(64, (5,5),activation='relu' , name='conl2w')(convw1)#20
#Avw1=AveragePooling2D(pool_size=(2,2))(convw2)
convw3 = Conv2D(64, (5,5),activation='relu' ,name='conl3w')(convw2)#16
convw4 = Conv2D(64, (5,5), activation='relu' ,name='conl4w')(convw3)#12
#Avw2=AveragePooling2D(pool_size=(2,2))(convw4)
convw5 = Conv2D(64, (5,5), activation='relu' ,name='conl5w')(convw4)#8
convw6 = Conv2D(64, (5,5), activation='relu' ,name='conl6w')(convw5)#4
pred_w = Conv2D(1, (1, 1),activation='relu' ,padding='same', name='reconstructed_W')(convw6)
w_extraction=Model(inputs=[image,wtm],outputs=[decoded,pred_w])
w_extraction.summary()
#----------------------training the model--------------------------------------
#------------------------------------------------------------------------------
#----------------------Data preparesion----------------------------------------
(x_train, _), (x_test, _) = mnist.load_data()
x_validation=x_train[1:10000,:,:]
x_train=x_train[10001:60000,:,:]
#
x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.
x_validation = x_validation.astype('float32') / 255.
x_train = np.reshape(x_train, (len(x_train), 28, 28, 1)) # adapt this if using `channels_first` image data format
x_test = np.reshape(x_test, (len(x_test), 28, 28, 1)) # adapt this if using `channels_first` image data format
x_validation = np.reshape(x_validation, (len(x_validation), 28, 28, 1))
#---------------------compile and train the model------------------------------
opt=SGD(momentum=0.99,lr=0.0001)
w_extraction.compile(optimizer='adam', loss={'imageprim':'mse','wprim':'binary_crossentropy'}, loss_weights={'imageprim': 0.5, 'wprim': 1.0},metrics=['mae'])
es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=40)
#rlrp = ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=20, min_delta=1E-4, verbose=1)
mc = ModelCheckpoint('sendAct.h5', monitor='val_loss', mode='min', verbose=1, save_best_only=True)
history=w_extraction.fit([x_train,w_expand], [x_train,w_expand],
epochs=4000,
batch_size=32,
validation_data=([x_validation,wv_expand], [x_validation,wv_expand]),
callbacks=[TensorBoard(log_dir='/home/jamalm8/tensorboardGNWLoss/', histogram_freq=0, write_graph=False),es,mc])
w_extraction.summary()
также, когда я изменяю эту строку кода slicAndJpeg(noised_image_pad)
на slicAndJpeg(K.eval(noised_image_pad))
, это вызывает эту ошибку.Я вношу ввод, когда подгоняю сеть, но думаю, что он не выполняется w_extraction.fit
!подскажите пожалуйста в чем проблема в обеих ситуациях?Я действительно в замешательстве.
Трассировка (последний последний вызов):
File "", строка 124, в decoded_noise = JPEGLayer () (декодированный) # 16
Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ engine \ base_layer.py", строка 457, в вызов output = self.call (входные данные, ** kwargs)
Файл "", строка 94, в шуме возврата вызова ()
Файл "", строка 88, в шуме slicAndJpeg (K.eval (noised_image_pad)) *
Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ backend \ tenorflow_backend.py", строка 673, в eval, возвращает to_dense (x) .eval (session = get_session ())
Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ensorflow \ python \ framework \ ops.py", строка 713, в eval return _eval_using_default_session (self, feed_dict, self.graph, сессия)
Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tenorflow \ python \ framework \ ops.py", строка 5157, в _eval_using_default_session возвращает session.run (тензор, feed_dict)
Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tenorflow \ python \ client \ session.py", строка 929, в run run_metadata_ptr)
Файл "D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tenorflow \ python \ client \ session.py ", строка 1152, в _run feed_dict_tensor, options, run_metadata)
Файл" D: \ software \Anaconda3 \ envs \ py36 \ lib \ site-packages \ tenorflow \ python \ client \ session.py ", строка 1328, в _do_run run_metadata)
Файл" D: \ software \ Anaconda3 \ envs \ py36 \ lib "\ site-packages \ tenorflow \ python \ client \ session.py ", строка 1348, в _do_call поднять тип (e) (node_def, op, message)
InvalidArgumentError: Вы должны указать значение для заполнителя tenor 'input_83 'с dtype float и shape [?, 28,28,1] [[node input_83 (определено в D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ backend \ tenorflow_backend.py: 517)= Placeholderdtype = DT_FLOAT, shape = [?, 28,28,1], _device = "/ job: localhost / replica: 0 / task: 0 / device: GPU: 0"]] [[{{node jpeg_layer_17 / zero_padding2d)_34 / Pad / _6829}} = _Recvclient_terminated = false, recv_device = "/ job: localhost / replica: 0 / task: 0 / device: CPU: 0", send_device = "/ job: localhost / replica: 0 / task: 0/ device: GPU: 0 ", send_device_incarnation = 1, тензор_имя =" edge_39_jpeg_layer_17 / zero_padding2d_34 / Pad ", tenors_type = DT_FLOAT, _device =" / job: localhost / replica: 0 / task: 0 / device: CPU: 0 "]]
Вызывается операцией 'input_83', определенной в: File
"D: \ software \ Anaconda3 \ envs \ py36 \ lib \ runpy.py", строка 193, в
_run_module_as_main
« main », mod_spec) Файл «D: \ software \ Anaconda3 \ envs \ py36 \ lib \ runpy.py», строка 85, в _run_code
exec (code, run_globals) Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ spyder_kernels \ console__main __. py",
строка 11, в
файл start.main () "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ spyder_kernels \ console \ start.py",
линия 310, в основном
Файл kernel.start () "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ ipykernel \ kernelapp.py",
строка 505, в начале
self.io_loop.start () Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tornado \ platform \ asyncio.py",
строка 132, в начале
self.asyncio_loop.run_forever () Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ asyncio \ base_events.py", строка
438, в run_forever
self._run_once () Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ asyncio \ base_events.py", строка
1451, в _run_once
handle._run () Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ asyncio \ events.py", строка 145, в
_бежать
self._callback (* self._args) Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tornado \ ioloop.py",
строка 758, в _run_callback
ret = callback () Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tornado \ stack_context.py",
строка 300, в null_wrapper
return fn (* args, ** kwargs) Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tornado \ gen.py",
линия 1233, во внутренней
self.run () Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tornado \ gen.py",
линия 1147, в прогоне
yielded = self.gen.send (значение) Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ ipykernel \ kernelbase.py",
строка 357, в process_one
yield gen.maybe_future (dispatch (* args)) Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tornado \ gen.py",
строка 326, в обертке
yielded = следующий (результат) Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ ipykernel \ kernelbase.py",
строка 267, в dispatch_shell
yield gen.maybe_future (обработчик (поток, идентификаторы, сообщения)) Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tornado \ gen.py",
строка 326, в обертке
yielded = следующий (результат) Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ ipykernel \ kernelbase.py",
строка 534, в execute_request
user_expressions, allow_stdin, файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tornado \ gen.py",
строка 326, в обертке
yielded = следующий (результат) Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ ipykernel \ ipkernel.py",
строка 294, в do_execute
res = shell.run_cell (код, store_history = store_history, тихий = без звука) Файл
"D: \ Software \ Anaconda3 \ envs \ py36 \ Lib \ сайт-пакеты \ ipykernel \ zmqshell.py",
строка 536, в run_cell
вернуть супер (ZMQInteractiveShell, self) .run_cell (* args, ** kwargs) файл
"D: \ Software \ Anaconda3 \ envs \ py36 \ Lib \ сайт-пакеты \ IPython \ ядро \ interactiveshell.py",
строка 2819, в run_cell
raw_cell, store_history, silent, shell_futures) Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ IPython \ core \ interactiveshell.py",
строка 2845, в _run_cell
return runner (coro) Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ IPython \ core \ async_helpers.py",
строка 67, в _pseudo_sync_runner
coro.send (Нет) файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ IPython \ core \ interactiveshell.py",
строка 3020, в run_cell_async
интерактивность = интерактивность, компилятор = компилятор, результат = результат) Файл
"D: \ Software \ Anaconda3 \ envs \ py36 \ Lib \ сайт-пакеты \ IPython \ ядро \ interactiveshell.py",
строка 3185, в run_ast_nodes
if (yield from self.run_code (code, result)): Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ IPython \ core \ interactiveshell.py",
строка 3267, в run_code
exec (code_obj, self.user_global_ns, self.user_ns) Файл "", строка 114, вimage = Входной файл ((28, 28, 1)) Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ engine \ input_layer.py", строка 178, в файле Input input_tensor = тензор)«D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ legacy \ interfaces.py», строка 91, в оболочке return func (* args, ** kwargs) Файл «D: \ software \ Anaconda3»\ envs \ py36 \ lib \ site-packages \ keras \ engine \ input_layer.py ", строка 87, в init name = self.name) Файл" D: \ software \ Anaconda3 \ envs \ py36 \ "lib \ site-packages \ keras \ backend \ tenorflow_backend.py ", строка 517, в качестве заполнителя x = tf.placeholder (dtype, shape = shape, name = name) Файл" D: \ software \ Anaconda3 \ envs \ py36 \ lib\ site-packages \ tenorflow \ python \ ops \ array_ops.py ", строка 1747, в качестве заполнителя возвращаем gen_array_ops.placeholder (dtype = dtype, shape = shape, name = name) Файл" D: \ software \ Anaconda3 \ envs \ py36\ lib \ site-packages \ tenorflow \ python \ ops \ gen_array_ops.py ", строка 5206, в качестве заполнителя" Placeholder ", dtype = dtype, shape = shape, name = name) Файл" D: \ software \ Anaconda3 \ envs \ "py36 \ Lib \ сайт-раckages \ tenorflow \ python \ framework \ op_def_library.py ", строка 787, в _apply_op_helper op_def = op_def) Файл" D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ensorflow \ python \ util \ deprecation.py "", строка 488, в new_func возвращаем func (* args, ** kwargs) Файл" D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ensorflowflow \ python \ framework \ ops.py ", строка 3274,в create_op op_def = op_def) Файл "D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tenorflow \ python \ framework \ ops.py", строка 1770, в init self._traceback= tf_stack.определено в D: \ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ backend \ tenorflow_backend.py: 517) = Placeholderdtype = DT_FLOAT, shape = [?, 28,28,1], _device = "/задание: localhost / реплика: 0 / задание: 0 / устройство: GPU: 0 "]] [[{{node jpeg_layer_17 / zero_padding2d_34 / Pad / _6829}} = _Recvclient_terminated = false, recv_device = "/ job: localhost / replica: 0 / task: 0 / device: CPU: 0", send_device = "/ job: localhost / replica: 0 / task: 0 / device: GPU: 0",send_device_incarnation = 1, тензор_имя = "edge_39_jpeg_layer_17 / zero_padding2d_34 / Pad", тензор_тип = DT_FLOAT, _device = "/ job: localhost / реплика: 0 / task: 0 / device: CPU: 0"]]