文章目录
import numpy as np
import torch
from PIL. Image import Image
from torch. autograd import Variable
def get_data ( ) : train_X= np. asarray( [ 3.3 , 4.4 , 5.5 , 6.71 , 6.93 , 4.168 , 9.779 , 6.182 , 7.59 , 2.167 , 7.042 , 10.791 , 5.313 , 7.997 , 5.654 , 9.27 , 3.1 ] ) train_Y= np. asarray( [ 1.7 , 2.76 , 2.09 , 3.19 , 1.694 , 1.537 , 3.366 , 2.596 , 2.53 , 1.221 , 2.827 , 3.465 , 1.65 , 2.904 , 2.42 , 2.94 , 1.3 ] ) dtype= torch. FloatTensorX= Variable( torch. from_numpy( train_X) . type ( dtype) , requires_grad= False ) . view( 17 , 1 ) y= Variable( torch. from_numpy( train_Y) . type ( dtype) , requires_grad= False ) return X, y
def get_weights ( ) : w= Variable( torch. randn( 1 ) , requires_grad= True ) b= Variable( torch. randn( 1 ) , requires_grad= True ) return w, b
w, b= get_weights( )
def simple_network ( x) : y_pred= torch. matmul( x, w) + breturn y_pred
def loss_fn ( y, y_pred) : loss= ( y_pred- y) . pow ( 2 ) . sum ( ) for param in [ w, b] : if not param. grad is None : param. grad. data. zero_( ) loss. backward( ) return loss. data[ 0 ]
def optimize ( learning_rate) : w. data-= learning_rate * w. grad. datab. data-= learning_rate * b. grad. data
from torch. utils. data import Dataset
class DogsAndCatsDataset ( Dataset) : def __init__ ( self, root_dir, size= ( 224 , 224 ) ) : self. files= globals ( root_dir) self. size= sizedef __len__ ( self) : return len ( self. files) def __getitem__ ( self, item) : img= np. asarray( Image. open ( self. files[ item] ) . resize( self. size) ) label= self. files[ item] . split( '/' ) [ - 2 ] return img, label
class myFirstNetwork ( torch. nn. Module) : def __init__ ( self, input_size, hidden_size, output_size) : super ( myFirstNetwork, self) . __init__( ) self. layer1= torch. nn. Linear( input_size, hidden_size) self. layer2= torch. nn. Linear( hidden_size, output_size) def __forward__ ( self, input ) : out= self. layer1( input ) out= torch. nn. ReLU( out) out= self. layer2( out) return out