import torch
import torch.nn as nn
from tensorflow import keras
import torch.nn.functional as F
import numpy as np
from torch.autograd import Variable
import tensorflow as tf
from tensorflow import keras
import matplotlib.pyplot as plt
import paddle
import warnings
from paddle.metric import Accuracy
# 训练数据
feature_name1="J:\\multi-scale\\data_test\\data_33.txt"
feature_data1=np.loadtxt(feature_name1)
feature_data1=np.int_(feature_data1)
train_X1=np.reshape(feature_data1,(100,32,32,1))
train_X1 = torch.tensor(train_X1)
print(train_X1.shape)
feature_name2="J:\\multi-scale\\data_test\\data_17.txt"
feature_data2=np.loadtxt(feature_name2)
feature_data2=np.int_(feature_data2)
train_X2=np.reshape(feature_data2,(100,16,16,1))
train_X2 = torch.tensor(train_X2)
print(train_X2.shape)
tag_name="J:\\multi-scale\\data_test\\ch_lable_33.txt"
tag_data=np.loadtxt(tag_name)
train_Y = keras.utils.to_categorical(tag_data, num_classes=8)
print(train_Y.shape)
class Bottleneck(nn.Module):
expansion = 4
def __init__(self, in_planes, planes, stride=1):
super(Bottleneck, self).__init__()
self.conv1 = nn.Conv2d(in_planes, planes, kernel_size=1, bias=False)
self.bn1 = nn.BatchNorm2d(planes)
self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=stride, padding=1, bias=False)
self.bn2 = nn.BatchNorm2d(planes)
self.conv3 = nn.Conv2d(planes, self.expansion*planes, kernel_size=1, bias=False)
self.bn3 = nn.BatchNorm2d(self.expansion*planes)
self.shortcut = nn.Sequential()
if stride != 1 or in_planes != self.expansion*planes:
self.shortcut = nn.Sequential(
nn.Conv2d(in_planes, self.expansion*planes, kernel_size=1, stride=stride, bias=False),
nn.BatchNorm2d(self.expansion*planes)
)
def forward(self, x):
out = F.relu(self.bn1(self.conv1(x)))
out = F.relu(self.bn2(self.conv2(out)))
out = self.bn3(self.conv3(out))
out += self.shortcut(x)
out = F.relu(out)
return out
def _make_layer(in_planes, block, planes, num_blocks, stride):
strides = [stride] + [1]*(num_blocks-1)
layers = []
for stride in strides:
layers.append(block(in_planes, planes, stride))
in_planes = planes * block.expansion
return nn.Sequential(*layers)
#定义网络
input1 = keras.Input(shape=(32, 32,1))
input2 = keras.Input(shape=(16, 16,1))
# Stage 1
x=nn.Conv2d(1, 256, kernel_size=7, stride=2, padding=3, bias=False)(input1)
x=nn.BatchNorm2d(64)(x)
c1 = F.relu(x)
c1 =x= F.max_pool2d(c1, kernel_size=3, stride=2, padding=1)(x)
# Stage 2
c2=_make_layer(Bottleneck, 128, 2, stride=2)(c1)
c3=_make_layer(Bottleneck, 128, 2, stride=2)(c2)
p2=nn.Conv2d( 512, 256, kernel_size=1, stride=1, padding=0)(input2)
#p3=nn.Conv2d( 512, 256, kernel_size=1, stride=1, padding=0)(input3)
p2=nn.Conv2d( 256, 128, kernel_size=1, stride=1, padding=0)(p2)
p3= keras.layers.concatenate([c2, p2])
p3=keras.layers.Flatten()(p3)
p3 = keras.layers.Dense(64, activation='relu')(p3)
output = keras.layers.Dense(8, activation='sigmoid')(p3)
model = keras.Model(inputs=[input1, input2], outputs=output)
model.summary()
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
history = model.fit([train_X1,train_X2],
train_Y,
epochs=30, validation_split=0.3)
错误提示: