import tensorflow as tf
import tensorflow.keras as keras
import tensorflow.keras.layers as layers
import time as time
import tensorflow.keras.preprocessing.image as image
import matplotlib.pyplot as plt
import os
from scipy.io import loadmat
import pandas as pd
import numpy as np
from sklearn import preprocessing # 0-1编码
from sklearn.model_selection import StratifiedShuffleSplit # 随机划分,保证每一类比例相同
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from tensorflow.keras.initializers import glorot_uniform
import matplotlib.pyplot as plt
from prettytable import PrettyTable
import six
import math
from matplotlib.pyplot import MultipleLocator
from sklearn.metrics import classification_report
from matplotlib.font_manager import FontProperties
physical_devices = tf.config.experimental.list_physical_devices('GPU')
tf.config.experimental.set_memory_growth(physical_devices[0], True)
win_size = 6
displacement = 3
mask = tf.zeros((win_size**2, win_size**2))
mask.shape
TensorShape([36, 36])
静态图张量无法直接修改
mask[-displacement*win_size:, :-displacement*win_size] = float('-inf')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-6-d77ca594eb9f> in <module>
----> 1 mask[-displacement*win_size:, :-displacement*win_size] = float('-inf')
TypeError: 'tensorflow.python.framework.ops.EagerTensor' object does not support item assignment
float('-inf')
-inf
mask_1 = tf.ones((win_size**2, win_size**2))
mask_1*float('-inf')
<tf.Tensor: shape=(36, 36), dtype=float32, numpy=
array([[-inf, -inf, -inf, ..., -inf, -inf, -inf],
[-inf, -inf, -inf, ..., -inf, -inf, -inf],
[-inf, -inf, -inf, ..., -inf, -inf, -inf],
...,
[-inf, -inf, -inf, ..., -inf, -inf, -inf],
[-inf, -inf, -inf, ..., -inf, -inf, -inf],
[-inf, -inf, -inf, ..., -inf, -inf, -inf]], dtype=float32)>
mask_1[-displacement*win_size:, :-displacement*win_size]*float('-inf')
<tf.Tensor: shape=(18, 18), dtype=float32, numpy=
array([[-inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,
-inf, -inf, -inf, -inf, -inf, -inf, -inf],
[-inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,
-inf, -inf, -inf, -inf, -inf, -inf, -inf],
[-inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,
-inf, -inf, -inf, -inf, -inf, -inf, -inf],
[-inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,
-inf, -inf, -inf, -inf, -inf, -inf, -inf],
[-inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,
-inf, -inf, -inf, -inf, -inf, -inf, -inf],
[-inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,
-inf, -inf, -inf, -inf, -inf, -inf, -inf],
[-inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,
-inf, -inf, -inf, -inf, -inf, -inf, -inf],
[-inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,
-inf, -inf, -inf, -inf, -inf, -inf, -inf],
[-inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,
-inf, -inf, -inf, -inf, -inf, -inf, -inf],
[-inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,
-inf, -inf, -inf, -inf, -inf, -inf, -inf],
[-inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,
-inf, -inf, -inf, -inf, -inf, -inf, -inf],
[-inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,
-inf, -inf, -inf, -inf, -inf, -inf, -inf],
[-inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,
-inf, -inf, -inf, -inf, -inf, -inf, -inf],
[-inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,
-inf, -inf, -inf, -inf, -inf, -inf, -inf],
[-inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,
-inf, -inf, -inf, -inf, -inf, -inf, -inf],
[-inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,
-inf, -inf, -inf, -inf, -inf, -inf, -inf],
[-inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,
-inf, -inf, -inf, -inf, -inf, -inf, -inf],
[-inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,
-inf, -inf, -inf, -inf, -inf, -inf, -inf]], dtype=float32)>
def set_value(matrix, x, y, val):
# 提取出要更新的行
row = tf.gather(matrix, x)
# 构造这行的新数据
new_row = tf.concat([row[:y], [val], row[y+1:]], axis=0)
# 使用 tf.scatter_update 方法进正行替换
matrix.assign(tf.scatter_update(matrix, x, new_row))
tf.scatter_nd()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-12-ba9c103687cb> in <module>
----> 1 tf.scatter_nd()
TypeError: scatter_nd() missing 3 required positional arguments: 'indices', 'updates', and 'shape'
pad方法
第一个0,代表上方补0行0,第一个2,代表下方补2行0.
第二个0,代表左方补0行0,第二个2,代表右方补2行0.
四个维度,上下左右
t=[[2,3,4],[5,6,7]]
print(tf.pad(t,[[0,2],[0,2]],"CONSTANT"))
tf.Tensor(
[[2 3 4 0 0]
[5 6 7 0 0]
[0 0 0 0 0]
[0 0 0 0 0]], shape=(4, 5), dtype=int32)
mask_1 = tf.ones((win_size**2, win_size**2))
mask_1
<tf.Tensor: shape=(36, 36), dtype=float32, numpy=
array([[1., 1., 1., ..., 1., 1., 1.],
[1., 1., 1., ..., 1., 1., 1.],
[1., 1., 1., ..., 1., 1., 1.],
...,
[1., 1., 1., ..., 1., 1., 1.],
[1., 1., 1., ..., 1., 1., 1.],
[1., 1., 1., ..., 1., 1., 1.]], dtype=float32)>
mask_2 = tf.ones((displacement*win_size,displacement*win_size))*float('-inf')
tf.pad(mask_2,[[0,win_size**2-displacement*win_size],[0,win_size**2-displacement*win_size]])
<tf.Tensor: shape=(36, 36), dtype=float32, numpy=
array([[-inf, -inf, -inf, ..., 0., 0., 0.],
[-inf, -inf, -inf, ..., 0., 0., 0.],
[-inf, -inf, -inf, ..., 0., 0., 0.],
...,
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.]], dtype=float32)>
mask_3 = tf.pad(mask_2,[[0,win_size**2-displacement*win_size],[0,win_size**2-displacement*win_size]])
t=[[2,3,4],[5,6,7]]
print(tf.pad(t,[[2,0],[0,2]],"CONSTANT"))
tf.Tensor(
[[0 0 0 0 0]
[0 0 0 0 0]
[2 3 4 0 0]
[5 6 7 0 0]], shape=(4, 5), dtype=int32)
mask_4 = tf.pad(mask_2,[[win_size**2-displacement*win_size,0],[0,win_size**2-displacement*win_size]])
mask_4
<tf.Tensor: shape=(36, 36), dtype=float32, numpy=
array([[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
...,
[-inf, -inf, -inf, ..., 0., 0., 0.],
[-inf, -inf, -inf, ..., 0., 0., 0.],
[-inf, -inf, -inf, ..., 0., 0., 0.]], dtype=float32)>
class CyclicShift(keras.layers.Layer):
def __init__(self, displacement_1,displacement_2):
super().__init__()
self.displacement_1 = displacement_1
self.displacement_2 = displacement_2
def call(self, x):
return tf.roll(x, shift = (self.displacement_1,self.displacement_2), axis=(1,2))
arr1 = np.array([[[1,2,3],[4,5,6]],
[[7,8,9],[10,11,12]]])
CyclicShift(1,1)(arr1)
<tf.Tensor: shape=(2, 2, 3), dtype=int32, numpy=
array([[[ 6, 4, 5],
[ 3, 1, 2]],
[[12, 10, 11],
[ 9, 7, 8]]])>
class CyclicShift1:
def __init__(self, displacement_1,displacement_2):
self.displacement_1 = displacement_1
self.displacement_2 = displacement_2
def roll_(self, x):
return tf.roll(x, shift = (self.displacement_1,self.displacement_2), axis=(1,2))
CyclicShift1(1,1).roll_(arr1)
<tf.Tensor: shape=(2, 2, 3), dtype=int32, numpy=
array([[[ 6, 4, 5],
[ 3, 1, 2]],
[[12, 10, 11],
[ 9, 7, 8]]])>