text:
#### Table of Content

20 May 2020, Volume 10 Issue 3
 Modification of visibility parameterization scheme and its application evaluation in Beijing WANG Jikang,XIE Chao,ZHANG Tianhang,ZHANG Bihui,ZHANG Hengde,RAO Xiaoqin 2020, 10 (3):  330-337.  doi: 10.12153/j.issn.1674-991X.20190186 Abstract ( 41 )   HTML ( 16 )   PDF (2144KB) ( 37 )   An modified visibility parameterization scheme (S1) was proposed based on the correlation between visibility and PM2.5 concentrations under different relative humidity, so as to improve the accuracy of visibility forecast by using the revised PM2.5 concentrations forecast results. In order to evaluate the forecast performance of the scheme, the forecasted PM2.5 concentrations based on a multi-model optimal integration method were used to forecast the visibility during the pollution process in Beijing for the period from February 18th to March 5th 2019. The scheme from Interagency Monitoring of Projected Visual Environments (IMPROVE, S2) and the a.pngicial neural network (S3) were also used to forecast the visibility in this period. The forecast results were compared and evaluated. The results showed that the forecast results of PM2.5 concentration based on the multi-model optimal integration method and relative humidity based on WRF4.0 mode were good, and their correlation coefficient reached 0.90. All of the three schemes had good forecast for the trend of visibility in the selected period. S1 hold the best performances with the highest correlation coefficient (0.85) and lowest root mean square error (RMSE). The average deviation of homogenization in S1 was 3.6 km lower than that in S2. S1 performed better than S3 in range of the visibility greater than 10 km. The effect of PM2.5 concentrations forecast on visibility forecast was higher than that of relative humidity forecast. The effect of relative humidity forecast could be more significant when the relative humidity exceeded 70%.
 A review of toxicity and mechanism of atmospheric particulate matter on zebrafish embryos GUO Shaojuan,ZHANG Yuanyuan,WANG Feifei,YANG Lixin 2020, 10 (3):  338-345.  doi: 10.12153/j.issn.1674-991X.20190155 Abstract ( 33 )   HTML ( 6 )   PDF (936KB) ( 33 )   Epidemiological studies have showed that low birth weight, preterm delivery, preeclampsia, spontaneous abortion, abnormal development of cardiovascular, digestive and nervous system, and birth defects in infants are associated with PM2.5 exposure. However, the toxic mechanism of PM2.5 on children’s development remains unclear. Zebrafish has been the main model animal of developmental toxicity research in vivo. The research progress of toxicity and mechanism of atmospheric particulate matter on zebrafish embryos was reviewed. It was revealed that atmospheric particulate matter exposure could cause an increase in embryo malformation rate and mortality, and the effect intensity was related to the source and exposure mode of particulate matter. Exposure to atmospheric particulate matter could damage the bones, heart, swim bladder, liver, bowel, muscle and other tissues. The toxicity mechanism mainly included changing the whole zebrafish embryo gene expression, microRNA expression, and heart AhR and Wnt/β-catenin pathway related gene expression, which eventually caused physiological process such as inflammation and oxidative stress, leaded to the embryo toxicity and organs deformity, and affected the cardiovascular, nervous and locomotor system development.
 Research progress of determination methods of atmospheric brown carbon WANG Lei,JIN Wenjing,ZHI Guorui,ZHANG Yuzhe,GUO Sicong,SUN Jianzhong 2020, 10 (3):  346-361.  doi: 10.12153/j.issn.1674-991X.20190157 Abstract ( 54 )   HTML ( 6 )   PDF (2398KB) ( 41 )   Atmospheric brown carbon (BrC) is a category of organic carbon (OC) that is light-absorbing in carbon aerosols. Compared with black carbon (BC), BrC absorption capacity grows faster with shorter wavelengths, and has become one of the hot spots in the research field of atmospheric aerosol energy budget. Because BrC comes from a wide range of sources and does not specifically refer to a single substance, there are no widely-accepted standard methods or reference materials for the determination of BrC. Various approaches for the determination of BrC appearing in literature were described, including the chemical method of separating BrC by solvent extraction, the optical method of distinguishing the absorption contribution of BrC from total based on the difference in light-absorption features between BrC and BC, the thermal/optical method of optically separating BrC from other substances in a few wavelengths on the traditional thermal/optical carbon analyzer in reference to the difference of thermal stability between BrC and BC, and the mass spectrometry of characterizing BrC at molecular-level. The principle, characteristics, application and research progress of the methods were systematically summarized and reviewed. It was also noted that almost all the quantitative determination methods currently used for BrC qua.pngication were exploratory and had great limitations. Optimization measures were needed to make up for the defects of individual methods, including the need for an inclusive methodology that did not exclude diversity and independence of existing methods, in order to make different methods intercomparable to a certain extent.
 Study on emission law of anthracite smelting of silicon carbide WANG Hongliang,ZHANG Yahui,DU Shilin,DING Wenwen,DU Jijun 2020, 10 (3):  362-367.  doi: 10.12153/j.issn.1674-991X.20190169 Abstract ( 44 )   HTML ( 4 )   PDF (1329KB) ( 36 )   China’s silicon carbide (SiC) production capacity ranks first in the world. However, due to the extensive unchanged smelting methods and the lack of industrial emission standards, a large amount of unorganized waste gas was exhausted, causing serious air pollution. The semi-closed collection device was used to convert the unorganized exhaust gas into organized emissions, which could be used to study its pollution factors and emission rules. Through on-site test, standard comparison and other methods, the main pollution factors in the industry were determined as three conventional pollution factors (SO2, NOx, PM) and one characteristic pollution factor (CO). The result of research showed that the daily emission variation of SO2, NOx and PM was similar to that of the smelting temperature. The daily emissions of SO2, NOx and PM was 439.00, 59.04 and 38.81 kg/d, respectively, in the constant temperature stage (high temperature stage). However, CO was affected by the competitive effects of main and side reactions at the same time, and thus its daily emission was higher in the heating and cooling stages, reaching 6 488.37 kg/d, but lower in the constant temperature stage, reaching 1 203.70 kg/d. According to the change of daily emission, the wind volume of fan and the velocity of absorption liquid could be controlled by frequency conversion to adapt to the pollution concentrations in different smelting periods, so as to reduce the cost of pollution control.
 Water temperature simulation of Lake Erhai based on EFDC model ZHANG Jinpeng,WU Yue,TIAN Zebin,CHU Zhaosheng,YUAN Jing,HOU Zeying 2020, 10 (3):  368-376.  doi: 10.12153/j.issn.1674-991X.20190197 Abstract ( 37 )   HTML ( 2 )   PDF (4050KB) ( 28 )   Lake Erhai, which is in the early stage of eutrophication, is a deep plateau lake. There is no obvious thermocline in summer and autumn with unique vertical distribution of water temperature. To learn the changing rules of the hydrodynamic elements such as water level, water temperature and to analyze the effects possibly caused by them, the three-dimensional hydrodynamic model of Lake Erhai was established based on Environmental Fluid Dynamics Code (EFDC). The Latin Hypercube Sampling (LHS) and Standard Rank Regression (SRR) methods were employed to perform the water temperature parameters sensitivity analysis. It was found that the water temperature of the lake was sensitive to the change of the two parameters, including the proportion of fast wave in shortwave radiation (FSWRATF) and the coefficient of shortwave radiation rapidly attenuated in water (SWRATNF), while the effect of the coefficient of shortware radiation slowly attenuated in water (SWRATNS) was not significant. The water temperature spatial distribution mainly changed in the north-south direction, and obviously changed with seasons. Water temperature in Lake Erhai featured in decreasing from the north to the south in spring and summer, and north-south low, intermediate high in autumn and winter, which might be correlated with Lake Erhai Basin’s terrain and the location of the estuaries. The simulation results perfectly fit the weak str.pngication of water temperature in Lake Erhai, which was of great significance for explaining the vertical distribution of nutrient and algal bloom occurrence conditions there.
 Application of load duration curve to analyze the phosphorus capacity of Hebei Section of Yongding River Basin ZHAO Jiejie,LEI Kun,SUN Mingdong,XU Xiangqin,CHENG Quanguo 2020, 10 (3):  377-384.  doi: 10.12153/j.issn.1674-991X.20190142 Abstract ( 38 )   HTML ( 4 )   PDF (2560KB) ( 21 )   The capacity of total phosphorous (TP) of five control sections (Laoyazhuang, Zuowei, Shixiali, Xiangshuipu, Bahaoqiao) in Hebei section of Yongding River Basin was calculated by load duration curve (LDC) method, and the temporal and spatial changes of pollutant capacity was analyzed based on the hydrological data of Yongding River Basin from 2002 to 2016 . Combined with 2010-2016 water quality monitoring data, the current pollution load of TP in each section of water was calculated, and the main types of pollution sources and the pollution load that should be reduced were analyzed. The results showed that there was great difference of TP capacity in time and space in Hebei section of Yongding River Basin, and the capacity of TP in downstream was relatively larger than that in upstream. TP capacity in five sections fluctuated greatly in different months and seasons, and the highest capacity of TP was mainly in July, October and November, while the lowest was mainly on January and February. Hebei section of Yongding River Basin was mainly affected by non-point source pollution emission. TP load of the other four sections needed to be reduced in different degrees in the high flow area, medium flow area and low flow area except for Laoyazhuang section in high flow area and medium flow area. The current TP load in Hebei section of Yongding River Basin exceeded the allowable load, so it was necessary to formulate total amount control targets and schemes at different time scales.
 Determination of dredging depth of Xingyun Lake based on heavy metal pollution and ecological risk assessment of sediment WEI Weiwei,LI Chunhua,YE Chun,HOU Xuechao,WANG Hao 2020, 10 (3):  385-391.  doi: 10.12153/j.issn.1674-991X.20190120 Abstract ( 32 )   HTML ( 4 )   PDF (1909KB) ( 31 )   It is necessary to determine rational dredging depth for environmental dredging projects of polluted sediment in lakes. Eight columnar sediment samples were collected from Xingyun Lake, and the vertical variation characteristics of heavy metals including As, Cr, Cu, Ni, Pb and Zn in the sediment of Xingyun Lake were analyzed. Geo-accumulation index and potential ecological risk index were used to assess the pollution degree and potential ecological risks posed by heavy metal contaminations, based on which the reasonable dredging depth was determined. The results showed that the average concentrations of As, Cr, Cu, Ni, Pb and Zn in the sediments of Xingyun Lake were 14.76, 35.76, 46.14, 46.08, 115.76 and 109.82 mg/kg, respectively. Compared with Soil Environmental Quality Risk Control Standard for Soil Contamination of Agricultural Land (Trial) (GB 15618-2018), As, Pb and Zn contents in the sediments of Xingyun Lake exceeded the screening value of agricultural land soil pollution risk. The pollution of heavy metals in the sediment was mostly clean, and the pollution of Pb and Zn in some sampling sites was relatively moderate, and the overall performance was Pb>Zn>As>Ni>Cu>Cr. The potential ecological risk of heavy metals in sediment was at the level of mild ecological hazard, and the ecological hazard level of each sampling point was 1#>7#>2#>6#>4#>3#>8#>5#. The environmental dredging depth of Xingyun Lake sediment was recommended to be 20-30 cm by using the method of critical cumulative depth combined with the inflection point of ecological risk change.
 Discussion on the way of determining environmental dredging depth based on nitrogen and phosphorus adsorption/desorption method: taking the demonstration section of Fenhe River in Taiyuan as an example MA Yonggang,CHENG Jin,LI Yande,GE Gaoling,SU Zhaobin 2020, 10 (3):  392-399.  doi: 10.12153/j.issn.1674-991X.20190057 Abstract ( 39 )   HTML ( 1 )   PDF (2040KB) ( 26 )   Effective dredging depth is the key index to determine dredging cost and treatment effect. There is no standard stipulation for nutrient content in sediment in the current standards and specifications in China, which is very unfavorable to the evaluation and determination of effective dredging depth of polluted sediment in rivers and lakes with excessive nutrient salt. Taking the demonstration section of dredging of Fenhe River in Taiyuan as an example, the sediments with the depth of 0.3-0.4, 0.9-1.0, 1.4-1.6 and 1.9-2.0 m were taken as representative core samples. The simulated water of $NH 4 +$ -N and $PO 4 3 -$ with Grade Ⅰ to worse than Grade Ⅴ and the overlying water of core samples were designed respectively to carried out nitrogen and phosphorus adsorption/desorption experiments, and the nitrogen and phosphorus adsorption/desorption characteristics of sediment at different depths were also analyzed. The results showed that $NH 4 +$ -N in the sediment within 1.6 m of the core sample was released to the water body, and the sediment at a depth of 1.9 m had certain adsorption to $NH 4 +$ -N in the water body. $PO 4 3 -$ in the sediment within 1.6 m had a risk of release to water body, and the sediment at a depth of 1.9 m had certain adsorption to $PO 4 3 -$ in water body. The concentrations of TN and $NH 4 +$ -N in the sediment at a depth of 1.3 m showed an obvious inflection point, and the concentration of TP in the sediment at a depth of 1.6 m showed an obvious inflection point. Comprehensively considering the influence of the sediment on overlaying water body and the vertical variation of sediment nitrogen and phosphorus concentrations, the effective dredging depth of Fenhe River demonstration section in Taiyuan was determined to be 1.6 m.
 Study on the effect of urban river environmental dredging and hydraulic dredging:taking Xuejiabang, Liangtang River of Wuxi as an example GUO Yun,HUANG Xiaofeng,LI Haini,QIU Weijian 2020, 10 (3):  400-405.  doi: 10.12153/j.issn.1674-991X.20190104 Abstract ( 33 )   HTML ( 2 )   PDF (1555KB) ( 34 )   In view of the serious endogenous pollution in Xuejiabang, Liangtang River of Wuxi City, two dredging methods, including environmental dredging and hydraulic dredging, were applied to evaluate the effect of dredging on the reduction of endogenous pollution in river by studying the changes of total nitrogen and total phosphorus in sediment and water before and after dredging, and the static release flux from the sediment. The results showed that the two dredging methods could effectively reduce the nutrient contents in the sediment. After environmental dredging, the total nitrogen and total phosphorus concentrations were reduced by 46.50% and 35.51%, respectively, and after hydraulic dredging, the total nitrogen and total phosphorus concentrations were reduced by 40.10% and 30.51%, respectively. But to achieve the same dredging effect, hydraulic dredging would lead to an increase in the amount of work compared with environmental dredging. On the premise of better control of exogenous pollution, both the two dredging methods could effectively reduce the pollution caused by endogenous release to water. The nitrogen and phosphorus release flux reduction rate of environmental dredging was higher with 46.92% and 38.53%, respectively, while that of hydralic dredging was 40.99% and 30.09%, respectively. In view of the shortage of land resources in urban areas, the problem of easy over-digging by hydraulic dredging and the difficulty in recovering the water ecosystem after dredging, it was suggested to adopt the environmental dredging method to solve the problem of the internal pollution of urban river courses.
 Purification effect of five kinds of hydrophytes on total nitrogen and nitrate in simulated vegetable field runoff water SHAO Kaidi,DUAN Jingjing,XUE Lihong,XUE Lixiang,ZHOU Beibei,XU Defu 2020, 10 (3):  406-413.  doi: 10.12153/j.issn.1674-991X.20190160 Abstract ( 35 )   HTML ( 1 )   PDF (2621KB) ( 25 )   In recent years, the planting area of vegetable greenhouse in Taihu Lake region had been increasing, and the high amount of fertilization had resulted in serious nitrate ( $N O 3 -$ -N) accumulation in vegetable soils. Nitrate was abundant in surface runoff at the beginning of rainfall during the opening of greenhouse in summer. In order to purify the surface runoff of vegetable field rich in $N O 3 -$ -N, a static simulated experiment with five common kinds of hydrophyte of Vallisneria natans, Elodea nuttallii, Ludwigia peploides, Myriophyllum verticillatum L. and Hydrocotyle chinensis in a tank containing simulated nitrate-rich runoff water was carried out. Results showed that at low $N O 3 -$ -N concentration with TN of 6.32-6.80 mg/L and $N O 3 -$ -N of 4.76-5.09 mg/L, all the five hydrophytes showed good removal effects in the early stage (the first week) with the removal rates of TN and $NO 3 -$ -N over 80% and 90%, respectively. But in the late stage (the third and fourth week), the removal rate of TN and $NO 3 -$ -N by Vallisneria natans, Elodea nuttallii and Hydrocotyle chinensis decreased obviously, while Ludwigia peploides and Myriophyllum verticillatum L. still maintained high $NO 3 -$ -N removal rate (over 90%). At high $NO 3 -$ -N concentration with TN of 15.62-18.00 mg/L and $N O 3 -$ -N of 13.19-13.96 mg/L, the growth of five hydrophytes all showed different degrees of stress. However, Ludwigia peploides and Myriophyllum verticillatum L. still maintained higher nitrogen removal capacity, which was mainly attributed to the large biomass and nitrogen uptake. There was no significant difference in nitrogen removal by denitrification between different treatments, therefore, Ludwigia peploides and Myriophyllum verticillatum L. were more suitable to purify the runoff water with high nitrate concentration.
 Removal of nitrate in tail water by biomass-sulfur mixed denitrification process TANG Shiqin,XIONG Lili,JIANG Rui,MAO Xuhui 2020, 10 (3):  414-423.  doi: 10.12153/j.issn.1674-991X.20190143 Abstract ( 43 )   HTML ( 3 )   PDF (5107KB) ( 19 )   Tail water containing relatively high concentration of $NO 3 -$ -N is often discharged even after secondary treatment process. A biomass-sulfur mixed denitrification system was constructed for the treatment of elevated concentration of $NO 3 -$ -N in tail water, and its performance for the removal of $NO 3 -$ -N was studied. The results of static experiments showed that woodchips-sulfur mixed denitrification system had good performance for the removal of nitrate (reaction rate constant 0.041 6 d-1) with the least conversion of $NO 3 -$ -N and $NH 4 +$ -N. The initial pH within the range of 6-9, and the woodchip/sulfur ratio of 0.5-2.0 had insignificant effect on the mixed denitrification process. The addition of iron fillings had a certain regulating effect on the pH of the system. In the dynamic experiments, mixed denitrification system with 50 g sulfur plus 25 g woodchips had a good removal effect on $NO 3 -$ -N with initial concentration of 15 mg/L , and the removal efficiency of $NO 3 -$ -N could reach 90%. The removal rate of high $NO 3 -$ -N concentration of mixed denitrification system could be improved by changing the proportion of woodchips and sulfur or adding iron sawdust. Among the trials, mixed denitrification system of 50 g sulfur and 50 g woodchips could maintain a removal efficiency of 90% even for 30 mg/L of $NO 3 -$ -N. Different initial $NO 3 -$ -N concentrations had some effect on the abundance of microbial community in the reaction column, but had little effect on the structure of microbial community.
 Study on advanced nitrogen removal efficiency of Arundo donax-gravel A/O biofilter for rural sewage treatment ZHAO Yuanzhe,DONG Weiyang,WANG Haiyan,CHU Zhaosheng,YAN Guokai,CHANG Yang,WANG Huan,LING Yu,LI Congyu 2020, 10 (3):  424-432.  doi: 10.12153/j.issn.1674-991X.20190153 Abstract ( 34 )   HTML ( 3 )   PDF (2378KB) ( 28 )   Rural sewage mixed with rainwater always has the characteristics of low pollution and low carbon-nitrogen ratio. Due to the lack of carbon source, the total nitrogen (TN) is difficult to remove and cannot meet the discharge value when rural sewage is treated by biological method. The broken Arundo donax pieces were used as the filter media and carbon source for the anoxic column of the anoxic/oxic (A/O) biofilter (2 #) to enhance the nitrogen removal for rural sewage, and the gravel-filling A/O biofilter (1#) was set up as the control, in order to study the nitrogen removal enhancement of Arundo donax. The denitrifying microbial communities in the system were also analyzed by the scanning electron microscopy (SEM) and real-time fluorescence quantitative polymerase chain reaction (qPCR). The results showed: when the influent CODCr, ammonium ( $NH 4 +$ -N), TN and phosphate ( $PO 4 3 -$ -P) concentrations were (79.47±14.21), (34.49±2.08), (34.73±3.87)and (2.38±0.46) mg/L, respectively, their removal rates of 1# and 2# biofilters were 88%±7% and 86%±6%, 90%±2% and 97%±7%, 38%±13% and 65%±9%, 27%±13% and 40%±18% , respectively, at the 10 h hydraulic retention time. The biofilter with Arundo donax as the anoxic column filter media could significantly enhance the removal rates of $NH 4 +$ -N, TN and $PO 4 3$ -P of A/O biofilter. The microorganisms on 1# and 2# biofilters anoxic column medias were mainly composed of short bacilli, and the abundance of denitrification genes and anaerobic ammonium oxidation (ANAMMOX) genes in 2# anoxic column was higher than those in 1# anoxic column.
 Removal performance of norfloxacin from waters by advanced oxidation processes based on different free radicals XU Ruomeng,WU Tong,SUO Ruijuan,QIAN Yajie 2020, 10 (3):  433-439.  doi: 10.12153/j.issn.1674-991X.20190177 Abstract ( 26 )   HTML ( 3 )   PDF (1969KB) ( 30 )   Because of their low occurrence concentration in water, the antibiotics are difficult to be effectively removed by the conventional municipal sewage treatment system. The removal efficiency of norfloxacin (NFX) by ultraviolet combined chlorine (UV/chlorine), hydrogen peroxide (UV/H2O2) and persulfate (UV/PS) was investigated. The results showed that the degradation of NFX by UV/chlorine was significantly more efficient than the other two systems. When the initial pH of solution was 7 and the concentration of chlorine was 30 μmol/L, the removal rate of NFX in 2 min could reach 98.67%. At the same oxidant concentration, the removal rate of NFX was 41.41% and 65.73% after 10 min by UV/H2O2 and UV/PS, respectively. For UV/chlorine system, the removal rate of NFX increased with the increase of chlorine concentration with the optimal concentration being 30 μmol/L. The pH had different effects on the removal rate of NFX by three systems. For UV/chlorine system, strong alkaline condition was beneficial for the removal of NFX, while neutral and weak alkalinity was more favorable for the removal of NFX for UV/H2O2 and UV/PS. Cl-in water matrix inhibited the removal of NFX by UV/chlorine, but had little effect on UV/H2O2 and UV/PS, while $HCO 3 -$ inhibited the removal of NFX by all three systems.
 Phytoextraction of cadmium contaminated agricultural soil by tobacco and swiss chard rotation systems TAN Kefu,TU Pengfei,YANG Yang,YUAN Jing,CHEN Linhan,ZENG Qingru 2020, 10 (3):  440-448.  doi: 10.12153/j.issn.1674-991X.20190167 Abstract ( 44 )   HTML ( 6 )   PDF (3356KB) ( 31 )   Phytoremediation of heavy metal contaminated soil has the advantages of environmental friendliness, moderate cost and in situ restoration. The farmland soil with medium and high risk of heavy metal pollution were selected for pot experiments to explore the remediation potential of tobacco (Nicotiana tobaccum L.) and swiss chard (Beta vulgaris var. cicla L.) rotation model for the heavy metals Pb, Zn, Cu and Cd in the contaminated soil of two kinds of farmland. The results showed that, on the tested soils, tobacco and swiss chard had certain enrichment capacity for Pb, Zn, Cu and Cd, especially for Cd. In the soil with high heavy metal pollution risk, the concentration of Cd in the lower leaves of tobacco at the mature stage was the highest, which reached 41.63 mg/kg, and the enrichment coefficient and transport coefficient of Cd with lower leaves of tobacco was 17.06 and 17.42, respectively; the Cd concentration in the roots of swiss chard at the mature stage was 7.55 mg/kg, and the enrichment coefficient was 3.85, significantly higher than that in the above ground part. According to the pot experiment with soil of medium heavy metal pollution risk, the concentration of Cd in the lower leaves of tobacco at the mature stage reached 34.59 mg/kg, and the enrichment coefficient and the transport coefficient was 40.69 and 13.67, respectively; the Cd concentration in the roots of swiss chard at the mature stage was 4.33 mg/kg, and the enrichment coefficient was 7.69. After the tobacco-swiss chard rotation pot experiment, the total amount of Pb, Zn, Cu and Cd in the two kinds of soils decreased by 2.99%, 3.55%, 12.41%, 57.64%, and 3.32%, 1.63%, 9.45%, 24.59%, respectively. At the same time, the effective concentrations of heavy metals Pb, Cu and Cd in soils were significantly reduced. In conclusion, the tobacco-swiss chard rotation model could provide good application potential in remediation of farmland polluted by heavy metals with medium and high pollution risk.
 Effect of Sedum plumbizincicola liquor returning to soils on the speciation and phytoextraction of heavy metals LI Zhenxuan,YANG Yuying,DONG Bei,HU Pengjie,WU Longhua,LUO Yongming 2020, 10 (3):  449-455.  doi: 10.12153/j.issn.1674-991X.20190152 Abstract ( 24 )   HTML ( 2 )   PDF (1628KB) ( 20 )   Sedum plumbizincicola, a hyperaccumulator, has been widely used in the remediation of cadmium and zinc polluted soils, but the treatment of the crop liquor which contains heavy metals after squeeze and dehydration of harvest biomass is an urgent problem to be solved. Choosing acidic and neutral soils, a pot experiment was conducted to return different doses of liquor to two types of soils and to grow Sedum plumbizincicola. The dynamic changes of soil pH, dissoluble organic carbon (DOC), CaCl2 extractable Cd and Zn (CaCl2-Cd/Zn), as well as plant growth and heavy metal reabsorption were monitored. The results showed that the pH increased in acid soil but decreased in neutral soil, and the DOC concentration of both soils increased significantly on 7 and 30 d after the addition of liquor, while the soil DOC concentration and pH were closed to the controlled soil in the middle and late growth stages. The CaCl2-Cd/Zn concentrations in acid soil treated with liquor increased gradually with growing time, and reached maximum on 105 d, while those in neutral soil showed a gradual decline. The liquor treatment inhibited the growth of Sedum plumbizincicola with reduced biomass, but increased the concentration of Cd in the shoots. With 100 mL/kg liquor treatment of acid soil, Cd and Zn accumulation in Sedum plumbizincicola shoot was higher than the input by addition of liquor, and the soil Cd and Zn concentrations after remediation were lower than soil initial values before liquor addition. Consequently, suitable dosage of liquor returning to the acid soil and planting Sedum plumbizincicola could remove Cd and Zn input by liquor again and achieve the dual purpose of liquor treatment and soil remediation.
 Research progress on in situ bioremediation enhancement technology of oil contaminated soil DAI Xiaoli,WANG Shuo,LI Jiabin,WEI Yan,WEI Wenxia 2020, 10 (3):  456-466.  doi: 10.12153/j.issn.1674-991X.20190141 Abstract ( 35 )   HTML ( 5 )   PDF (1562KB) ( 37 )   The number and activity of oil-degrading microorganisms in oil contaminated soil are often insufficient due to the limitations of oil contaminants nature and soil environmental conditions, which lead to the reduction of their natural purification capacity and slow natural purification speed. A variety of in situ bioremediation enhancement technologies can improve the degradation ability of oil degradation microorganisms, including bioaugmentation, biostimulation, bioventing and microbial fuel cell (MFC). Bioaugmentation is the addition of high efficiency microorganisms, immobilized microorganisms, plant-microorganisms, etc. Biostimulation is theaddition of nutrients, biosurfactants, co-metabolism substrates, electron acceptors, etc. The mechanism, research and application status of various in situ bioremediation enhancement technologies were analyzed. It was further proposed that the applications of electro-bioremediation, MFC combined bioremediation and immobilized material nanoparticles should be the future research direction of the in situ bioremediation enhancement technologies.
 Research on limits of heavy metal contents in ceramsite blocks based on risk assessment YANG Yanmei,WANG Liyang,YANG Yufei,HU Lan,HUANG Qifei 2020, 10 (3):  467-474.  doi: 10.12153/j.issn.1674-991X.20190190 Abstract ( 24 )   HTML ( 1 )   PDF (2849KB) ( 19 )   In order to control the environmental risk of heavy metals in the ceramsite used for building materials, samples of ceramsite blocks prepared by using ceramsite fired by electroplating sludge were collected, and the content of heavy metals, the toxic concentration of leaching and the effective amount of heavy metals in ceramsite blocks were analyzed. The characteristic heavy metals and their potential risks were ide.pngied, and a method based on the risk assessment method for determining the limits of heavy metals was established when ceramsite blocks were used. The method was used to calculate the limits of heavy metals in ceramsite blocks in two kinds of exposure scenarios, i.e. wall materials and pavement laying. The results showed that the characteristic heavy metals in the ceramsite blocks were Cr, Ni, Cu, Zn and Ba. The leaching (releasing) toxicity concentrations of these five heavy metals was 30.0-48.6, 37.2-132.0, 28.7-50.6, 12.9-169.0 and 609-674 μg/L, respectively. These values were lower than the standard limits in Ide.pngication Standard for Hazardous Wastes-Ide.pngication for Extraction Toxicity (GB 5085.3-2007). Therefore, the use of electroplating sludge to make ceramsite blocks was a feasible resource harmless treatment method. The maximum leaching(releasing) concentration of Cr, Ni, Cu, Zn, Ba from abandoned ceramsite blocks was 1.50, 0.20, 10.00, 10.00 and 7.00 mg/L, respectively. The limit content of Cr, Ni, Cu, Zn, Ba in ceramsite blocks was of 186 198, 3 313, 8 740, 36 703 and 3 272 mg/kg, respectively. The proposed method could provide basis for the environmental risk control of heavy metals in ceramsite and provide a reference for the method of formulating the content limits of heavy metals in building materials.
 Research progress of catalytic oxidation technologies of hydrogen sulfide YIN Mengxue,FAN Feiyue,ZHAO Long,HOU Hong 2020, 10 (3):  475-481.  doi: 10.12153/j.issn.1674-991X.20190165 Abstract ( 35 )   HTML ( 5 )   PDF (897KB) ( 28 )   With the development of the economy and increasingly regard on environment protection, a series of measures were formulated and strict regulations on hydrogen sulfide (H2S) emission were established by the state. The removal of H2S has been the focus of material research and development, and catalytic oxidation is considered as a main method for H2S removal. Two kinds of catalysts including carbon-based catalysts (unsupported activated carbon, metal-supported activated carbon) and metal oxide-based catalysts (oxide-supported catalyst, metal oxide catalyst, anionic clay-supported catalyst) have been widely studied. The catalytic oxidation mechanism of H2S, preparation method for these two catalysts and H2S removal efficiency as well as the potential applications of these catalysts were discussed in detail. Carbon materials had become a popular choice as catalyst or support due to their large specific surface area, high porosity and modifiable active sites. Meanwhile, they were usually operated at relatively low temperatures and showed a good stability, and no strict stoichiometric ratios of O2/H2S was needed during H2S treatment process. However, such catalysts could only treat low concentrations of H2S and operated at lower hourly space velocity. In addition, the catalysts should be regenerated periodically after a period of use. As for metal oxide catalyst , they could treat high concentrations of H2S and showed a good catalytic performance even at higher temperatures (200-300 ℃), but the cost of the catalysts was high due to the strict O2/H2S stoichiometric ratio, high temperature and poor regenerability. Nitrogen-rich porous carbon and alkali metal-loaded alkaline millimeter mesoporous carbon spheres (MCS) exhibited excellent catalytic performance. On this basis, the future development direction of H2S catalytic oxidation was addressed.
 Persulfate oxidation for remediation of polycyclic aromatic hydrocarbon contaminated soil ZHOU Jinqian,MA Jianli,SHANG Xiaofu,ZHANG Liangyun,LI Xiaoguang,LIN Xiaoquan 2020, 10 (3):  482-486.  doi: 10.12153/j.issn.1674-991X.20190148 Abstract ( 37 )   HTML ( 5 )   PDF (2171KB) ( 55 )   The activation methods and mechanism of persulfate oxidation were introduced. Based on this, comparative experiments were set up to analyze the effects of sodium hydroxide and ferrous sulfate activating sodium persulfate oxidation on the remediation of polycyclic aromatic hydrocarbons (PAHs) contaminated soil. The effects of pH, the ratio of ferrous sulfate to sodium persulfate, and the reaction time on the removal of PAHs by the ferrous sulfate/sodium persulfate system were investigated, and the composition of reaction products was studied. The results showed that compared with sodium hydroxide, ferrous sulfate had a better effect on remediating PAHs contaminated soil by activated sodium persulfate oxidation. When the pH was acidic or neutral, the quantity ratio of ferrous sulfate to sodium persulfate was 1∶2.0, and the reaction time was 5 days, the removal effect of PAHs was the best. Therefore, on the basis of controlling the reaction conditions, the activation of sodium persulfate by transition metal ions was one of the better methods to repair PAHs contaminated soil.
 Characteristics and disposal practice of domestic waste in pastoral area: a case study on the western region of Keshketeng Banner in Inner Mongolia MENGGEN Tuya,YIN Xuefeng 2020, 10 (3):  487-493.  doi: 10.12153/j.issn.1674-991X.20190128 Abstract ( 20 )   HTML ( 4 )   PDF (2156KB) ( 20 )   The treatment of domestic garbage in agricultural and pastoral areas is an important part of the practice of rural ecological civilization construction, and also one of the conditions of constructing ecological barrier in north of China. Taking the typical pastoral area, the western region of Keshketeng Banner of Inner Mongolia autonomous region as the research area, the characteristics and components of domestic garbage in the pastoral area were investigated, and the garbage classification model of “Mengjia Environmental Protection” of rural pastoral area was taken as the research case to analyze the garbage collection volume and component changes. The cost of garbage collection was calculated and the effect of garbage treatment mode was evaluated. The results showed that domestic garbage in pastoral areas could be divided into resource recyclable, kitchen waste and general garbage, and the actual emission of kitchen waste was very small. The average proportion of recyclables in household waste was 95.48%, the output of household waste was 0.49 kg/(household·d), the cost of household waste treatment was 1 848.76 yuan/ton, and the average household treatment cost was 337.39 yuan/a. “Mengjia Environmental Protection” garbage classification mode in rural pastoral areas made village household garbage to be effectively treated with obvious environmental and social benefits. The treatment practice of domestic waste in pastoral area had reference significance and demonstration effect for promoting the treatment of domestic waste and the construction of rural ecological civilization.
 Scenario analysis and forecasts of water environment carrying capacity in Nanjing City XU Zhiqing,LIU Xueyu,DENG Qiyu,YAN Bingfei,XIAO Shuhu,SUN Chen 2020, 10 (3):  494-503.  doi: 10.12153/j.issn.1674-991X.20190168 Abstract ( 44 )   HTML ( 4 )   PDF (2444KB) ( 27 )   The study of future development of regional water environment carrying capacity (WECC) is necessary to support the construction of regional ecological civilization. Taking Nanjing City as an example, a three dimensional indicator system of WECC based on the composite system of socioeconomic, water resources and water environment was established. A regionally applicable system dynamics model and six development scenarios were also designed. On this basis, the genetic algorithm was applied to projection pursuit optimization, and the genetic projection pursuit method was constructed to predict WECC under different scenarios in 2017-2030. The study showed that the WECC of Nanjing was increasing under each of the scenarios in 2017-2030, and the performance of promoting WECC was: comprehensive development scheme (30.1%) > water saving scheme (28.5%) > water pollution control scheme (24.2%) > economic optimization scheme (24.0%) > current pattern scheme (21.3%) > high population growth scheme (12.5%). Under the current pattern scheme, the WECC of Nanjing would be steadily improved, and exceed Level Ⅰ by 2027. This is to say, under the current development mode, the scale of Nanjing’s socio-economic development would be within the scale that could be supported by the water environment. The WECC under the comprehensive scheme was the fastest to reach Level Ⅰ. Under the high population growth scheme, the development level of WECC would be significantly hindered, and never reach Level Ⅰ during the study period. If Nanjing City adopted the model of population growth, economic optimization, water resource conservation and water pollution control, WECC would be improved faster.
 Comparative study of environmental performance in Yangtze River Economic Belt under different standards YAN Bo,SUN Qihong,LI Xiaomin,XU Yaxuan 2020, 10 (3):  504-511.  doi: 10.12153/j.issn.1674-991X.20190198 Abstract ( 44 )   HTML ( 13 )   PDF (1229KB) ( 19 )   In order to assess ecological environmental performance of 11 provinces (municipalities) in Yangtze River Economic Belt (YREB) reasonably, the environmental performance research was carried out by constructing environmental performance index (EPI) system. Considering the influence of economic development levels on regional environmental protection input capacity, the differential index evaluation values under different economic development levels were proposed using the Environmental Kuznets Curves (EKC) and the mean value theory, and EPI of 11 provinces (municipalities) which reflected the degree of regional efforts to environmental protection were calculated by using entropy method. The results showed that from 2011 to 2017, the environmental performance of YREB as a whole showed an upward trend and the annual average EPI of 11 provinces (municipalities) in YREB was increased from 49.74 to 61.70, but the solid waste control performance declined. In 2017, the EPI score of 11 provinces (municipalities) ranking from high to low was Hunan (68.76), Anhui (66.62), Chongqing (64.86), Sichuan (64.30), Zhejiang (61.26), Shanghai (60.96), Jiangxi (59.53), Hubei (58.80), Guizhou (58.68), Yunnan (57.65) and Jiangsu (57.24), and the average EPI of downstream reaches, middle reaches and upstream reaches was 59.82, 63.43 and 61.37,respectively, indicating that spatial distribution of environmental performance was relatively balanced. According to the clustering of EPI and GDP per capita, the 11 provinces (municipalities) were divided into three groups, i.e. accelerated transformation area, steady development area and slow upgrading area, to fit in different development schemes. The evaluation method reflected the efforts of each region to protect the ecological environment to a certain extent, by taking the differences of economic development level in different regions into account, which could provide effective supplement of conventional environmental performance research.
 Study on methylmercury water quality standards for aquatic life protection in China SU Hailei,GUO Fei,WEI Yuan,SHI Di,SUN Fuhong 2020, 10 (3):  512-516.  doi: 10.12153/j.issn.1674-991X.20190172 Abstract ( 31 )   HTML ( 5 )   PDF (695KB) ( 23 )   Methylmercury is a kind of organic mercury with strong bioavailability and toxicity. Because of high bioaccumulation and bioavailability, methylmercury can pose serious harmful effects to aquatic life at higher trophic levels and cause neurotoxicity, endocrine disruption and reproductive toxicity to vertebrates. The presence of methylmercury has been detected in various environmental media (water, sediments and organisms) in China. The traditional water quality criteria for methylmercury was only derived from the acute and chronic toxicity data of aquatic organisms in water that did not take bioaccumulation and bioavailability into account, which may cause lower-protection problem to aquatic ecosystem. As the tissue concentrations could directly reflect the bioavailability of cumulative substances, water quality criteria deriving from toxic data based on tissue was more scie.pngic, and could provide protection for aquatic ecosystem more reasonably and reliably. Based on a review of the latest toxic data for methylmercury exposure, the criteria value of methylmercury based on tissue concentration was calculated at 23.15 μg/kg, the water quality criteria for protection of aquatic life was determined at 0.12 ng/L, and the water quality standard value of methylmercury of aquatic organisms suitable for Chinese aquatic environment was derived at 0.35 ng/L. The results can provide a new method and support for the transformation of methylmercury water quality criteria to the water quality standards and for the water environmental management of bioaccumulative chemicals.


text:
# Source code for torch.nn.modules.pooling

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

from .module import Module
from .utils import _single, _pair, _triple
from .. import functional as F

class _MaxPoolNd(Module):
__constants__ = ['kernel_size', 'stride', 'padding', 'dilation',
'return_indices', 'ceil_mode']

def __init__(self, kernel_size, stride=None, padding=0, dilation=1,
return_indices=False, ceil_mode=False):
super(_MaxPoolNd, self).__init__()
self.kernel_size = kernel_size
self.stride = stride or kernel_size
self.dilation = dilation
self.return_indices = return_indices
self.ceil_mode = ceil_mode

def extra_repr(self):
', dilation={dilation}, ceil_mode={ceil_mode}'.format(**self.__dict__)

[docs]class MaxPool1d(_MaxPoolNd): r"""Applies a 1D max pooling over an input signal composed of several input planes. In the simplest case, the output value of the layer with input size :math:(N, C, L) and output :math:(N, C, L_{out}) can be precisely described as: .. math:: out(N_i, C_j, k) = \max_{m=0, \ldots, \text{kernel\_size} - 1} input(N_i, C_j, stride \times k + m) If :attr:padding is non-zero, then the input is implicitly zero-padded on both sides for :attr:padding number of points. :attr:dilation controls the spacing between the kernel points. It is harder to describe, but this link_ has a nice visualization of what :attr:dilation does. Args: kernel_size: the size of the window to take a max over stride: the stride of the window. Default value is :attr:kernel_size padding: implicit zero padding to be added on both sides dilation: a parameter that controls the stride of elements in the window return_indices: if True, will return the max indices along with the outputs. Useful for :class:torch.nn.MaxUnpool1d later ceil_mode: when True, will use ceil instead of floor to compute the output shape Shape: - Input: :math:(N, C, L_{in}) - Output: :math:(N, C, L_{out}), where .. math:: L_{out} = \left\lfloor \frac{L_{in} + 2 \times \text{padding} - \text{dilation} \times (\text{kernel\_size} - 1) - 1}{\text{stride}} + 1\right\rfloor Examples:: >>> # pool of size=3, stride=2 >>> m = nn.MaxPool1d(3, stride=2) >>> input = torch.randn(20, 16, 50) >>> output = m(input) .. _link: https://github.com/vdumoulin/conv_arithmetic/blob/master/README.md """ def forward(self, input): return F.max_pool1d(input, self.kernel_size, self.stride, self.padding, self.dilation, self.ceil_mode, self.return_indices)
[docs]class MaxPool2d(_MaxPoolNd): r"""Applies a 2D max pooling over an input signal composed of several input planes. In the simplest case, the output value of the layer with input size :math:(N, C, H, W), output :math:(N, C, H_{out}, W_{out}) and :attr:kernel_size :math:(kH, kW) can be precisely described as: .. math:: \begin{aligned} out(N_i, C_j, h, w) ={} & \max_{m=0, \ldots, kH-1} \max_{n=0, \ldots, kW-1} \\ & \text{input}(N_i, C_j, \text{stride[0]} \times h + m, \text{stride[1]} \times w + n) \end{aligned} If :attr:padding is non-zero, then the input is implicitly zero-padded on both sides for :attr:padding number of points. :attr:dilation controls the spacing between the kernel points. It is harder to describe, but this link_ has a nice visualization of what :attr:dilation does. The parameters :attr:kernel_size, :attr:stride, :attr:padding, :attr:dilation can either be: - a single int -- in which case the same value is used for the height and width dimension - a tuple of two ints -- in which case, the first int is used for the height dimension, and the second int for the width dimension Args: kernel_size: the size of the window to take a max over stride: the stride of the window. Default value is :attr:kernel_size padding: implicit zero padding to be added on both sides dilation: a parameter that controls the stride of elements in the window return_indices: if True, will return the max indices along with the outputs. Useful for :class:torch.nn.MaxUnpool2d later ceil_mode: when True, will use ceil instead of floor to compute the output shape Shape: - Input: :math:(N, C, H_{in}, W_{in}) - Output: :math:(N, C, H_{out}, W_{out}), where .. math:: H_{out} = \left\lfloor\frac{H_{in} + 2 * \text{padding[0]} - \text{dilation[0]} \times (\text{kernel\_size[0]} - 1) - 1}{\text{stride[0]}} + 1\right\rfloor .. math:: W_{out} = \left\lfloor\frac{W_{in} + 2 * \text{padding[1]} - \text{dilation[1]} \times (\text{kernel\_size[1]} - 1) - 1}{\text{stride[1]}} + 1\right\rfloor Examples:: >>> # pool of square window of size=3, stride=2 >>> m = nn.MaxPool2d(3, stride=2) >>> # pool of non-square window >>> m = nn.MaxPool2d((3, 2), stride=(2, 1)) >>> input = torch.randn(20, 16, 50, 32) >>> output = m(input) .. _link: https://github.com/vdumoulin/conv_arithmetic/blob/master/README.md """ def forward(self, input): return F.max_pool2d(input, self.kernel_size, self.stride, self.padding, self.dilation, self.ceil_mode, self.return_indices)
[docs]class MaxPool3d(_MaxPoolNd): r"""Applies a 3D max pooling over an input signal composed of several input planes. In the simplest case, the output value of the layer with input size :math:(N, C, D, H, W), output :math:(N, C, D_{out}, H_{out}, W_{out}) and :attr:kernel_size :math:(kD, kH, kW) can be precisely described as: .. math:: \begin{aligned} \text{out}(N_i, C_j, d, h, w) ={} & \max_{k=0, \ldots, kD-1} \max_{m=0, \ldots, kH-1} \max_{n=0, \ldots, kW-1} \\ & \text{input}(N_i, C_j, \text{stride[0]} \times d + k, \text{stride[1]} \times h + m, \text{stride[2]} \times w + n) \end{aligned} If :attr:padding is non-zero, then the input is implicitly zero-padded on both sides for :attr:padding number of points. :attr:dilation controls the spacing between the kernel points. It is harder to describe, but this link_ has a nice visualization of what :attr:dilation does. The parameters :attr:kernel_size, :attr:stride, :attr:padding, :attr:dilation can either be: - a single int -- in which case the same value is used for the depth, height and width dimension - a tuple of three ints -- in which case, the first int is used for the depth dimension, the second int for the height dimension and the third int for the width dimension Args: kernel_size: the size of the window to take a max over stride: the stride of the window. Default value is :attr:kernel_size padding: implicit zero padding to be added on all three sides dilation: a parameter that controls the stride of elements in the window return_indices: if True, will return the max indices along with the outputs. Useful for :class:torch.nn.MaxUnpool3d later ceil_mode: when True, will use ceil instead of floor to compute the output shape Shape: - Input: :math:(N, C, D_{in}, H_{in}, W_{in}) - Output: :math:(N, C, D_{out}, H_{out}, W_{out}), where .. math:: D_{out} = \left\lfloor\frac{D_{in} + 2 \times \text{padding}[0] - \text{dilation}[0] \times (\text{kernel\_size}[0] - 1) - 1}{\text{stride}[0]} + 1\right\rfloor .. math:: H_{out} = \left\lfloor\frac{H_{in} + 2 \times \text{padding}[1] - \text{dilation}[1] \times (\text{kernel\_size}[1] - 1) - 1}{\text{stride}[1]} + 1\right\rfloor .. math:: W_{out} = \left\lfloor\frac{W_{in} + 2 \times \text{padding}[2] - \text{dilation}[2] \times (\text{kernel\_size}[2] - 1) - 1}{\text{stride}[2]} + 1\right\rfloor Examples:: >>> # pool of square window of size=3, stride=2 >>> m = nn.MaxPool3d(3, stride=2) >>> # pool of non-square window >>> m = nn.MaxPool3d((3, 2, 2), stride=(2, 1, 2)) >>> input = torch.randn(20, 16, 50,44, 31) >>> output = m(input) .. _link: https://github.com/vdumoulin/conv_arithmetic/blob/master/README.md """ # noqa: E501 def forward(self, input): return F.max_pool3d(input, self.kernel_size, self.stride, self.padding, self.dilation, self.ceil_mode, self.return_indices)
class _MaxUnpoolNd(Module): def extra_repr(self): return 'kernel_size={}, stride={}, padding={}'.format( self.kernel_size, self.stride, self.padding )
[docs]class MaxUnpool1d(_MaxUnpoolNd): r"""Computes a partial inverse of :class:MaxPool1d. :class:MaxPool1d is not fully invertible, since the non-maximal values are lost. :class:MaxUnpool1d takes in as input the output of :class:MaxPool1d including the indices of the maximal values and computes a partial inverse in which all non-maximal values are set to zero. .. note:: :class:MaxPool1d can map several input sizes to the same output sizes. Hence, the inversion process can get ambiguous. To accommodate this, you can provide the needed output size as an additional argument :attr:output_size in the forward call. See the Inputs and Example below. Args: kernel_size (int or tuple): Size of the max pooling window. stride (int or tuple): Stride of the max pooling window. It is set to :attr:kernel_size by default. padding (int or tuple): Padding that was added to the input Inputs: - input: the input Tensor to invert - indices: the indices given out by :class:~torch.nn.MaxPool1d - output_size (optional): the targeted output size Shape: - Input: :math:(N, C, H_{in}) - Output: :math:(N, C, H_{out}), where .. math:: H_{out} = (H_{in} - 1) \times \text{stride}[0] - 2 \times \text{padding}[0] + \text{kernel\_size}[0] or as given by :attr:output_size in the call operator Example:: >>> pool = nn.MaxPool1d(2, stride=2, return_indices=True) >>> unpool = nn.MaxUnpool1d(2, stride=2) >>> input = torch.tensor([[[1., 2, 3, 4, 5, 6, 7, 8]]]) >>> output, indices = pool(input) >>> unpool(output, indices) tensor([[[ 0., 2., 0., 4., 0., 6., 0., 8.]]]) >>> # Example showcasing the use of output_size >>> input = torch.tensor([[[1., 2, 3, 4, 5, 6, 7, 8, 9]]]) >>> output, indices = pool(input) >>> unpool(output, indices, output_size=input.size()) tensor([[[ 0., 2., 0., 4., 0., 6., 0., 8., 0.]]]) >>> unpool(output, indices) tensor([[[ 0., 2., 0., 4., 0., 6., 0., 8.]]]) """ def __init__(self, kernel_size, stride=None, padding=0): super(MaxUnpool1d, self).__init__() self.kernel_size = _single(kernel_size) self.stride = _single(stride or kernel_size) self.padding = _single(padding) def forward(self, input, indices, output_size=None): # type: (Tensor, Tensor, Optional[List[int]]) -> Tensor return F.max_unpool1d(input, indices, self.kernel_size, self.stride, self.padding, output_size)
[docs]class MaxUnpool2d(_MaxUnpoolNd): r"""Computes a partial inverse of :class:MaxPool2d. :class:MaxPool2d is not fully invertible, since the non-maximal values are lost. :class:MaxUnpool2d takes in as input the output of :class:MaxPool2d including the indices of the maximal values and computes a partial inverse in which all non-maximal values are set to zero. .. note:: :class:MaxPool2d can map several input sizes to the same output sizes. Hence, the inversion process can get ambiguous. To accommodate this, you can provide the needed output size as an additional argument :attr:output_size in the forward call. See the Inputs and Example below. Args: kernel_size (int or tuple): Size of the max pooling window. stride (int or tuple): Stride of the max pooling window. It is set to :attr:kernel_size by default. padding (int or tuple): Padding that was added to the input Inputs: - input: the input Tensor to invert - indices: the indices given out by :class:~torch.nn.MaxPool2d - output_size (optional): the targeted output size Shape: - Input: :math:(N, C, H_{in}, W_{in}) - Output: :math:(N, C, H_{out}, W_{out}), where .. math:: H_{out} = (H_{in} - 1) \times \text{stride[0]} - 2 \times \text{padding[0]} + \text{kernel\_size[0]} .. math:: W_{out} = (W_{in} - 1) \times \text{stride[1]} - 2 \times \text{padding[1]} + \text{kernel\_size[1]} or as given by :attr:output_size in the call operator Example:: >>> pool = nn.MaxPool2d(2, stride=2, return_indices=True) >>> unpool = nn.MaxUnpool2d(2, stride=2) >>> input = torch.tensor([[[[ 1., 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12], [13, 14, 15, 16]]]]) >>> output, indices = pool(input) >>> unpool(output, indices) tensor([[[[ 0., 0., 0., 0.], [ 0., 6., 0., 8.], [ 0., 0., 0., 0.], [ 0., 14., 0., 16.]]]]) >>> # specify a different output size than input size >>> unpool(output, indices, output_size=torch.Size([1, 1, 5, 5])) tensor([[[[ 0., 0., 0., 0., 0.], [ 6., 0., 8., 0., 0.], [ 0., 0., 0., 14., 0.], [ 16., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.]]]]) """ def __init__(self, kernel_size, stride=None, padding=0): super(MaxUnpool2d, self).__init__() self.kernel_size = _pair(kernel_size) self.stride = _pair(stride or kernel_size) self.padding = _pair(padding) def forward(self, input, indices, output_size=None): # type: (Tensor, Tensor, Optional[List[int]]) -> Tensor return F.max_unpool2d(input, indices, self.kernel_size, self.stride, self.padding, output_size)
[docs]class MaxUnpool3d(_MaxUnpoolNd): r"""Computes a partial inverse of :class:MaxPool3d. :class:MaxPool3d is not fully invertible, since the non-maximal values are lost. :class:MaxUnpool3d takes in as input the output of :class:MaxPool3d including the indices of the maximal values and computes a partial inverse in which all non-maximal values are set to zero. .. note:: :class:MaxPool3d can map several input sizes to the same output sizes. Hence, the inversion process can get ambiguous. To accommodate this, you can provide the needed output size as an additional argument :attr:output_size in the forward call. See the Inputs section below. Args: kernel_size (int or tuple): Size of the max pooling window. stride (int or tuple): Stride of the max pooling window. It is set to :attr:kernel_size by default. padding (int or tuple): Padding that was added to the input Inputs: - input: the input Tensor to invert - indices: the indices given out by :class:~torch.nn.MaxPool3d - output_size (optional): the targeted output size Shape: - Input: :math:(N, C, D_{in}, H_{in}, W_{in}) - Output: :math:(N, C, D_{out}, H_{out}, W_{out}), where .. math:: D_{out} = (D_{in} - 1) \times \text{stride[0]} - 2 \times \text{padding[0]} + \text{kernel\_size[0]} .. math:: H_{out} = (H_{in} - 1) \times \text{stride[1]} - 2 \times \text{padding[1]} + \text{kernel\_size[1]} .. math:: W_{out} = (W_{in} - 1) \times \text{stride[2]} - 2 \times \text{padding[2]} + \text{kernel\_size[2]} or as given by :attr:output_size in the call operator Example:: >>> # pool of square window of size=3, stride=2 >>> pool = nn.MaxPool3d(3, stride=2, return_indices=True) >>> unpool = nn.MaxUnpool3d(3, stride=2) >>> output, indices = pool(torch.randn(20, 16, 51, 33, 15)) >>> unpooled_output = unpool(output, indices) >>> unpooled_output.size() torch.Size([20, 16, 51, 33, 15]) """ def __init__(self, kernel_size, stride=None, padding=0): super(MaxUnpool3d, self).__init__() self.kernel_size = _triple(kernel_size) self.stride = _triple(stride or kernel_size) self.padding = _triple(padding) def forward(self, input, indices, output_size=None): # type: (Tensor, Tensor, Optional[List[int]]) -> Tensor return F.max_unpool3d(input, indices, self.kernel_size, self.stride, self.padding, output_size)
[docs]class AvgPool1d(_AvgPoolNd): r"""Applies a 1D average pooling over an input signal composed of several input planes. In the simplest case, the output value of the layer with input size :math:(N, C, L), output :math:(N, C, L_{out}) and :attr:kernel_size :math:k can be precisely described as: .. math:: \text{out}(N_i, C_j, l) = \frac{1}{k} \sum_{m=0}^{k-1} \text{input}(N_i, C_j, \text{stride} \times l + m) If :attr:padding is non-zero, then the input is implicitly zero-padded on both sides for :attr:padding number of points. The parameters :attr:kernel_size, :attr:stride, :attr:padding can each be an int or a one-element tuple. Args: kernel_size: the size of the window stride: the stride of the window. Default value is :attr:kernel_size padding: implicit zero padding to be added on both sides ceil_mode: when True, will use ceil instead of floor to compute the output shape count_include_pad: when True, will include the zero-padding in the averaging calculation Shape: - Input: :math:(N, C, L_{in}) - Output: :math:(N, C, L_{out}), where .. math:: L_{out} = \left\lfloor \frac{L_{in} + 2 \times \text{padding} - \text{kernel\_size}}{\text{stride}} + 1\right\rfloor Examples:: >>> # pool with window of size=3, stride=2 >>> m = nn.AvgPool1d(3, stride=2) >>> m(torch.tensor([[[1.,2,3,4,5,6,7]]])) tensor([[[ 2., 4., 6.]]]) """ def __init__(self, kernel_size, stride=None, padding=0, ceil_mode=False, count_include_pad=True): super(AvgPool1d, self).__init__() self.kernel_size = _single(kernel_size) self.stride = _single(stride if stride is not None else kernel_size) self.padding = _single(padding) self.ceil_mode = ceil_mode self.count_include_pad = count_include_pad def forward(self, input): return F.avg_pool1d( input, self.kernel_size, self.stride, self.padding, self.ceil_mode, self.count_include_pad)
[docs]class AvgPool2d(_AvgPoolNd): r"""Applies a 2D average pooling over an input signal composed of several input planes. In the simplest case, the output value of the layer with input size :math:(N, C, H, W), output :math:(N, C, H_{out}, W_{out}) and :attr:kernel_size :math:(kH, kW) can be precisely described as: .. math:: out(N_i, C_j, h, w) = \frac{1}{kH * kW} \sum_{m=0}^{kH-1} \sum_{n=0}^{kW-1} input(N_i, C_j, stride[0] \times h + m, stride[1] \times w + n) If :attr:padding is non-zero, then the input is implicitly zero-padded on both sides for :attr:padding number of points. The parameters :attr:kernel_size, :attr:stride, :attr:padding can either be: - a single int -- in which case the same value is used for the height and width dimension - a tuple of two ints -- in which case, the first int is used for the height dimension, and the second int for the width dimension Args: kernel_size: the size of the window stride: the stride of the window. Default value is :attr:kernel_size padding: implicit zero padding to be added on both sides ceil_mode: when True, will use ceil instead of floor to compute the output shape count_include_pad: when True, will include the zero-padding in the averaging calculation divisor_override: if specified, it will be used as divisor, otherwise attr:kernel_size will be used Shape: - Input: :math:(N, C, H_{in}, W_{in}) - Output: :math:(N, C, H_{out}, W_{out}), where .. math:: H_{out} = \left\lfloor\frac{H_{in} + 2 \times \text{padding}[0] - \text{kernel\_size}[0]}{\text{stride}[0]} + 1\right\rfloor .. math:: W_{out} = \left\lfloor\frac{W_{in} + 2 \times \text{padding}[1] - \text{kernel\_size}[1]}{\text{stride}[1]} + 1\right\rfloor Examples:: >>> # pool of square window of size=3, stride=2 >>> m = nn.AvgPool2d(3, stride=2) >>> # pool of non-square window >>> m = nn.AvgPool2d((3, 2), stride=(2, 1)) >>> input = torch.randn(20, 16, 50, 32) >>> output = m(input) """ __constants__ = ['kernel_size', 'stride', 'padding', 'ceil_mode', 'count_include_pad', 'divisor_override'] def __init__(self, kernel_size, stride=None, padding=0, ceil_mode=False, count_include_pad=True, divisor_override=None): super(AvgPool2d, self).__init__() self.kernel_size = kernel_size self.stride = stride or kernel_size self.padding = padding self.ceil_mode = ceil_mode self.count_include_pad = count_include_pad self.divisor_override = divisor_override def forward(self, input): return F.avg_pool2d(input, self.kernel_size, self.stride, self.padding, self.ceil_mode, self.count_include_pad, self.divisor_override)
[docs]class AvgPool3d(_AvgPoolNd): r"""Applies a 3D average pooling over an input signal composed of several input planes. In the simplest case, the output value of the layer with input size :math:(N, C, D, H, W), output :math:(N, C, D_{out}, H_{out}, W_{out}) and :attr:kernel_size :math:(kD, kH, kW) can be precisely described as: .. math:: \begin{aligned} \text{out}(N_i, C_j, d, h, w) ={} & \sum_{k=0}^{kD-1} \sum_{m=0}^{kH-1} \sum_{n=0}^{kW-1} \\ & \frac{\text{input}(N_i, C_j, \text{stride}[0] \times d + k, \text{stride}[1] \times h + m, \text{stride}[2] \times w + n)} {kD \times kH \times kW} \end{aligned} If :attr:padding is non-zero, then the input is implicitly zero-padded on all three sides for :attr:padding number of points. The parameters :attr:kernel_size, :attr:stride can either be: - a single int -- in which case the same value is used for the depth, height and width dimension - a tuple of three ints -- in which case, the first int is used for the depth dimension, the second int for the height dimension and the third int for the width dimension Args: kernel_size: the size of the window stride: the stride of the window. Default value is :attr:kernel_size padding: implicit zero padding to be added on all three sides ceil_mode: when True, will use ceil instead of floor to compute the output shape count_include_pad: when True, will include the zero-padding in the averaging calculation divisor_override: if specified, it will be used as divisor, otherwise attr:kernel_size will be used Shape: - Input: :math:(N, C, D_{in}, H_{in}, W_{in}) - Output: :math:(N, C, D_{out}, H_{out}, W_{out}), where .. math:: D_{out} = \left\lfloor\frac{D_{in} + 2 \times \text{padding}[0] - \text{kernel\_size}[0]}{\text{stride}[0]} + 1\right\rfloor .. math:: H_{out} = \left\lfloor\frac{H_{in} + 2 \times \text{padding}[1] - \text{kernel\_size}[1]}{\text{stride}[1]} + 1\right\rfloor .. math:: W_{out} = \left\lfloor\frac{W_{in} + 2 \times \text{padding}[2] - \text{kernel\_size}[2]}{\text{stride}[2]} + 1\right\rfloor Examples:: >>> # pool of square window of size=3, stride=2 >>> m = nn.AvgPool3d(3, stride=2) >>> # pool of non-square window >>> m = nn.AvgPool3d((3, 2, 2), stride=(2, 1, 2)) >>> input = torch.randn(20, 16, 50,44, 31) >>> output = m(input) """ __constants__ = ['kernel_size', 'stride', 'padding', 'ceil_mode', 'count_include_pad', 'divisor_override'] def __init__(self, kernel_size, stride=None, padding=0, ceil_mode=False, count_include_pad=True, divisor_override=None): super(AvgPool3d, self).__init__() self.kernel_size = kernel_size self.stride = stride or kernel_size self.padding = padding self.ceil_mode = ceil_mode self.count_include_pad = count_include_pad self.divisor_override = divisor_override def forward(self, input): return F.avg_pool3d(input, self.kernel_size, self.stride, self.padding, self.ceil_mode, self.count_include_pad, self.divisor_override) def __setstate__(self, d): super(AvgPool3d, self).__setstate__(d) self.__dict__.setdefault('padding', 0) self.__dict__.setdefault('ceil_mode', False) self.__dict__.setdefault('count_include_pad', True)
[docs]class FractionalMaxPool2d(Module): r"""Applies a 2D fractional max pooling over an input signal composed of several input planes. Fractional MaxPooling is described in detail in the paper Fractional MaxPooling_ by Ben Graham The max-pooling operation is applied in :math:kH \times kW regions by a stochastic step size determined by the target output size. The number of output features is equal to the number of input planes. Args: kernel_size: the size of the window to take a max over. Can be a single number k (for a square kernel of k x k) or a tuple (kh, kw) output_size: the target output size of the image of the form oH x oW. Can be a tuple (oH, oW) or a single number oH for a square image oH x oH output_ratio: If one wants to have an output size as a ratio of the input size, this option can be given. This has to be a number or tuple in the range (0, 1) return_indices: if True, will return the indices along with the outputs. Useful to pass to :meth:nn.MaxUnpool2d. Default: False Examples: >>> # pool of square window of size=3, and target output size 13x12 >>> m = nn.FractionalMaxPool2d(3, output_size=(13, 12)) >>> # pool of square window and target output size being half of input image size >>> m = nn.FractionalMaxPool2d(3, output_ratio=(0.5, 0.5)) >>> input = torch.randn(20, 16, 50, 32) >>> output = m(input) .. _Fractional MaxPooling: http://arxiv.org/abs/1412.6071 """ __constants__ = ['kernel_size', 'return_indices', 'output_size', 'output_ratio'] def __init__(self, kernel_size, output_size=None, output_ratio=None, return_indices=False, _random_samples=None): super(FractionalMaxPool2d, self).__init__() self.kernel_size = _pair(kernel_size) self.return_indices = return_indices self.register_buffer('_random_samples', _random_samples) self.output_size = _pair(output_size) if output_size is not None else None self.output_ratio = _pair(output_ratio) if output_ratio is not None else None if output_size is None and output_ratio is None: raise ValueError("FractionalMaxPool2d requires specifying either " "an output size, or a pooling ratio") if output_size is not None and output_ratio is not None: raise ValueError("only one of output_size and output_ratio may be specified") if self.output_ratio is not None: if not (0 < self.output_ratio[0] < 1 and 0 < self.output_ratio[1] < 1): raise ValueError("output_ratio must be between 0 and 1 (got {})" .format(output_ratio)) def forward(self, input): return F.fractional_max_pool2d( input, self.kernel_size, self.output_size, self.output_ratio, self.return_indices, _random_samples=self._random_samples)
class FractionalMaxPool3d(Module): r"""Applies a 3D fractional max pooling over an input signal composed of several input planes. Fractional MaxPooling is described in detail in the paper Fractional MaxPooling_ by Ben Graham The max-pooling operation is applied in :math:kTxkHxkW regions by a stochastic step size determined by the target output size. The number of output features is equal to the number of input planes. Args: kernel_size: the size of the window to take a max over. Can be a single number k (for a square kernel of k x k x k) or a tuple (kt x kh x kw) output_size: the target output size of the image of the form oT x oH x oW. Can be a tuple (oT, oH, oW) or a single number oH for a square image oH x oH x oH output_ratio: If one wants to have an output size as a ratio of the input size, this option can be given. This has to be a number or tuple in the range (0, 1) return_indices: if True, will return the indices along with the outputs. Useful to pass to :meth:nn.MaxUnpool3d. Default: False Examples: >>> # pool of cubic window of size=3, and target output size 13x12x11 >>> m = nn.FractionalMaxPool3d(3, output_size=(13, 12, 11)) >>> # pool of cubic window and target output size being half of input size >>> m = nn.FractionalMaxPool3d(3, output_ratio=(0.5, 0.5, 0.5)) >>> input = torch.randn(20, 16, 50, 32, 16) >>> output = m(input) .. _Fractional MaxPooling: http://arxiv.org/abs/1412.6071 """ __constants__ = ['kernel_size', 'return_indices', 'output_size', 'output_ratio'] def __init__(self, kernel_size, output_size=None, output_ratio=None, return_indices=False, _random_samples=None): super(FractionalMaxPool3d, self).__init__() self.kernel_size = _triple(kernel_size) self.return_indices = return_indices self.register_buffer('_random_samples', _random_samples) self.output_size = _triple(output_size) if output_size is not None else None self.output_ratio = _triple(output_ratio) if output_ratio is not None else None if output_size is None and output_ratio is None: raise ValueError("FractionalMaxPool3d requires specifying either " "an output size, or a pooling ratio") if output_size is not None and output_ratio is not None: raise ValueError("only one of output_size and output_ratio may be specified") if self.output_ratio is not None: if not (0 < self.output_ratio[0] < 1 and 0 < self.output_ratio[1] < 1 and 0 < self.output_ratio[2] < 1): raise ValueError("output_ratio must be between 0 and 1 (got {})" .format(output_ratio)) def forward(self, input): return F.fractional_max_pool3d( input, self.kernel_size, self.output_size, self.output_ratio, self.return_indices, _random_samples=self._random_samples) class _LPPoolNd(Module): __constants__ = ['norm_type', 'kernel_size', 'stride', 'ceil_mode'] def __init__(self, norm_type, kernel_size, stride=None, ceil_mode=False): super(_LPPoolNd, self).__init__() self.norm_type = norm_type self.kernel_size = kernel_size self.stride = stride self.ceil_mode = ceil_mode def extra_repr(self): return 'norm_type={norm_type}, kernel_size={kernel_size}, stride={stride}, ' \ 'ceil_mode={ceil_mode}'.format(**self.__dict__)
[docs]class LPPool1d(_LPPoolNd): r"""Applies a 1D power-average pooling over an input signal composed of several input planes. On each window, the function computed is: .. math:: f(X) = \sqrt[p]{\sum_{x \in X} x^{p}} - At p = :math:\infty, one gets Max Pooling - At p = 1, one gets Sum Pooling (which is proportional to Average Pooling) .. note:: If the sum to the power of p is zero, the gradient of this function is not defined. This implementation will set the gradient to zero in this case. Args: kernel_size: a single int, the size of the window stride: a single int, the stride of the window. Default value is :attr:kernel_size ceil_mode: when True, will use ceil instead of floor to compute the output shape Shape: - Input: :math:(N, C, L_{in}) - Output: :math:(N, C, L_{out}), where .. math:: L_{out} = \left\lfloor\frac{L_{in} - \text{kernel\_size}}{\text{stride}} + 1\right\rfloor Examples:: >>> # power-2 pool of window of length 3, with stride 2. >>> m = nn.LPPool1d(2, 3, stride=2) >>> input = torch.randn(20, 16, 50) >>> output = m(input) """ def forward(self, input): return F.lp_pool1d(input, float(self.norm_type), self.kernel_size, self.stride, self.ceil_mode)
[docs]class LPPool2d(_LPPoolNd): r"""Applies a 2D power-average pooling over an input signal composed of several input planes. On each window, the function computed is: .. math:: f(X) = \sqrt[p]{\sum_{x \in X} x^{p}} - At p = :math:\infty, one gets Max Pooling - At p = 1, one gets Sum Pooling (which is proportional to average pooling) The parameters :attr:kernel_size, :attr:stride can either be: - a single int -- in which case the same value is used for the height and width dimension - a tuple of two ints -- in which case, the first int is used for the height dimension, and the second int for the width dimension .. note:: If the sum to the power of p is zero, the gradient of this function is not defined. This implementation will set the gradient to zero in this case. Args: kernel_size: the size of the window stride: the stride of the window. Default value is :attr:kernel_size ceil_mode: when True, will use ceil instead of floor to compute the output shape Shape: - Input: :math:(N, C, H_{in}, W_{in}) - Output: :math:(N, C, H_{out}, W_{out}), where .. math:: H_{out} = \left\lfloor\frac{H_{in} - \text{kernel\_size}[0]}{\text{stride}[0]} + 1\right\rfloor .. math:: W_{out} = \left\lfloor\frac{W_{in} - \text{kernel\_size}[1]}{\text{stride}[1]} + 1\right\rfloor Examples:: >>> # power-2 pool of square window of size=3, stride=2 >>> m = nn.LPPool2d(2, 3, stride=2) >>> # pool of non-square window of power 1.2 >>> m = nn.LPPool2d(1.2, (3, 2), stride=(2, 1)) >>> input = torch.randn(20, 16, 50, 32) >>> output = m(input) """ def forward(self, input): return F.lp_pool2d(input, float(self.norm_type), self.kernel_size, self.stride, self.ceil_mode)
class _AdaptiveMaxPoolNd(Module): __constants__ = ['output_size', 'return_indices'] def __init__(self, output_size, return_indices=False): super(_AdaptiveMaxPoolNd, self).__init__() self.output_size = output_size self.return_indices = return_indices def extra_repr(self): return 'output_size={}'.format(self.output_size) # FIXME (by @ssnl): Improve adaptive pooling docs: specify what the input and # output shapes are, and how the operation computes output.
[docs]class AdaptiveMaxPool1d(_AdaptiveMaxPoolNd): r"""Applies a 1D adaptive max pooling over an input signal composed of several input planes. The output size is H, for any input size. The number of output features is equal to the number of input planes. Args: output_size: the target output size H return_indices: if True, will return the indices along with the outputs. Useful to pass to nn.MaxUnpool1d. Default: False Examples: >>> # target output size of 5 >>> m = nn.AdaptiveMaxPool1d(5) >>> input = torch.randn(1, 64, 8) >>> output = m(input) """ def forward(self, input): return F.adaptive_max_pool1d(input, self.output_size, self.return_indices)
[docs]class AdaptiveMaxPool2d(_AdaptiveMaxPoolNd): r"""Applies a 2D adaptive max pooling over an input signal composed of several input planes. The output is of size H x W, for any input size. The number of output features is equal to the number of input planes. Args: output_size: the target output size of the image of the form H x W. Can be a tuple (H, W) or a single H for a square image H x H. H and W can be either a int, or None which means the size will be the same as that of the input. return_indices: if True, will return the indices along with the outputs. Useful to pass to nn.MaxUnpool2d. Default: False Examples: >>> # target output size of 5x7 >>> m = nn.AdaptiveMaxPool2d((5,7)) >>> input = torch.randn(1, 64, 8, 9) >>> output = m(input) >>> # target output size of 7x7 (square) >>> m = nn.AdaptiveMaxPool2d(7) >>> input = torch.randn(1, 64, 10, 9) >>> output = m(input) >>> # target output size of 10x7 >>> m = nn.AdaptiveMaxPool2d((None, 7)) >>> input = torch.randn(1, 64, 10, 9) >>> output = m(input) """ def forward(self, input): return F.adaptive_max_pool2d(input, self.output_size, self.return_indices)
[docs]class AdaptiveMaxPool3d(_AdaptiveMaxPoolNd): r"""Applies a 3D adaptive max pooling over an input signal composed of several input planes. The output is of size D x H x W, for any input size. The number of output features is equal to the number of input planes. Args: output_size: the target output size of the image of the form D x H x W. Can be a tuple (D, H, W) or a single D for a cube D x D x D. D, H and W can be either a int, or None which means the size will be the same as that of the input. return_indices: if True, will return the indices along with the outputs. Useful to pass to nn.MaxUnpool3d. Default: False Examples: >>> # target output size of 5x7x9 >>> m = nn.AdaptiveMaxPool3d((5,7,9)) >>> input = torch.randn(1, 64, 8, 9, 10) >>> output = m(input) >>> # target output size of 7x7x7 (cube) >>> m = nn.AdaptiveMaxPool3d(7) >>> input = torch.randn(1, 64, 10, 9, 8) >>> output = m(input) >>> # target output size of 7x9x8 >>> m = nn.AdaptiveMaxPool3d((7, None, None)) >>> input = torch.randn(1, 64, 10, 9, 8) >>> output = m(input) """ def forward(self, input): return F.adaptive_max_pool3d(input, self.output_size, self.return_indices)
class _AdaptiveAvgPoolNd(Module): __constants__ = ['output_size'] def __init__(self, output_size): super(_AdaptiveAvgPoolNd, self).__init__() self.output_size = output_size def extra_repr(self): return 'output_size={}'.format(self.output_size)
[docs]class AdaptiveAvgPool1d(_AdaptiveAvgPoolNd): r"""Applies a 1D adaptive average pooling over an input signal composed of several input planes. The output size is H, for any input size. The number of output features is equal to the number of input planes. Args: output_size: the target output size H Examples: >>> # target output size of 5 >>> m = nn.AdaptiveAvgPool1d(5) >>> input = torch.randn(1, 64, 8) >>> output = m(input) """ def forward(self, input): return F.adaptive_avg_pool1d(input, self.output_size)
[docs]class AdaptiveAvgPool2d(_AdaptiveAvgPoolNd): r"""Applies a 2D adaptive average pooling over an input signal composed of several input planes. The output is of size H x W, for any input size. The number of output features is equal to the number of input planes. Args: output_size: the target output size of the image of the form H x W. Can be a tuple (H, W) or a single H for a square image H x H. H and W can be either a int, or None which means the size will be the same as that of the input. Examples: >>> # target output size of 5x7 >>> m = nn.AdaptiveAvgPool2d((5,7)) >>> input = torch.randn(1, 64, 8, 9) >>> output = m(input) >>> # target output size of 7x7 (square) >>> m = nn.AdaptiveAvgPool2d(7) >>> input = torch.randn(1, 64, 10, 9) >>> output = m(input) >>> # target output size of 10x7 >>> m = nn.AdaptiveMaxPool2d((None, 7)) >>> input = torch.randn(1, 64, 10, 9) >>> output = m(input) """ def forward(self, input): return F.adaptive_avg_pool2d(input, self.output_size)
[docs]class AdaptiveAvgPool3d(_AdaptiveAvgPoolNd): r"""Applies a 3D adaptive average pooling over an input signal composed of several input planes. The output is of size D x H x W, for any input size. The number of output features is equal to the number of input planes. Args: output_size: the target output size of the form D x H x W. Can be a tuple (D, H, W) or a single number D for a cube D x D x D. D, H and W can be either a int, or None which means the size will be the same as that of the input. Examples: >>> # target output size of 5x7x9 >>> m = nn.AdaptiveAvgPool3d((5,7,9)) >>> input = torch.randn(1, 64, 8, 9, 10) >>> output = m(input) >>> # target output size of 7x7x7 (cube) >>> m = nn.AdaptiveAvgPool3d(7) >>> input = torch.randn(1, 64, 10, 9, 8) >>> output = m(input) >>> # target output size of 7x9x8 >>> m = nn.AdaptiveMaxPool3d((7, None, None)) >>> input = torch.randn(1, 64, 10, 9, 8) >>> output = m(input) """ def forward(self, input): return F.adaptive_avg_pool3d(input, self.output_size)

format: plain


text:
## Chemistry: The Central Science (13th Edition)

Benzoic acid is stronger than phenol because, the extra "O" in $C_6H_5COOH$ increases the $O-H$ bond polarity, which increases the acidity of the compound.
This happens because, since $O$ is electronegative, it attracts the electrons from the hydrogen, increasing the bond polarity.


text:
## anonymous 5 years ago I need to find the surface area and volume of a sphere. I must solve it completely. r=x in the problem. How am I suposed to solve that?

surface area=$4\times \pi \times x^{2}$ volume=$4/3\times \pi \times x^3$


text:
## anonymous 5 years ago what is the equivalent fractions for 3/4

1. heisenberg

$\frac{3}{4} * \frac{n}{n} , n \in \mathbb{Z}$

2. heisenberg

that last part means, where n is an integer (a non zero integer in this case). there are an infinite number of equivalent fractions


text:
# Zoho Simple and Compound Interest Quiz 1

Question 1

Time: 00:00:00
At what rate of simple interest does a sum of Rs 24000 yield an interest of Rs 96000 in 5 years

28

28

56

56

80

80

95

95

Once you attempt the question then PrepInsta explanation will be displayed.

Start

Question 2

Time: 00:00:00
A certain Sum that was lent to Rajesh at S.I  amounts to 38200 times the sum in 3 years and 58400 times the sum in 8 years. Find the value of the rate of interest

2002

2002

40400

40400

76540

76540

Once you attempt the question then PrepInsta explanation will be displayed.

Start

Question 3

Time: 00:00:00
Parineeti lent a sum of Rs 80,000 to Priyanka and Nick at 15% p.a and 20 % p.a. Simple interest respectively. If after 2 years the total amount received by Parineeti is Rs 100,000. How much amount was lent to Priyanka?

620000

620000

170000

170000

50000

50000

1,20,000

1,20,000

Once you attempt the question then PrepInsta explanation will be displayed.

Start

Question 4

Time: 00:00:00
If the difference between the S.I and C.I on the sum of money at 21% p.a for 2 years is Rs 4851. Find the sum?

53678

53678

110000

110000

621000

621000

415600

415600

Once you attempt the question then PrepInsta explanation will be displayed.

Start

Question 5

Time: 00:00:00
A sum of money invested at S.I becomes 13 times itself in 4 years of time. If the rate of interest is increased by 200 percentage points. In how many years will the sum become 6 times itself?

9

9

1

1

4

4

6

6

Once you attempt the question then PrepInsta explanation will be displayed.

Start

Question 6

Time: 00:00:00
Find the compound interest on a sum of Rs 23000 at 20% p.a. for 3 years?

1210

1210

16744

16744

10000

10000

67200

67200

Once you attempt the question then PrepInsta explanation will be displayed.

Start

Question 7

Time: 00:00:00
If the compound interest on a sum of Rs 83000 at 10% p.a for t years is Rs 27473, what is the value of t ?

9

9

1

1

3

3

2

2

Once you attempt the question then PrepInsta explanation will be displayed.

Start

Question 8

Time: 00:00:00
The Compound Interest on a certain amount at a certain rate of interest, for the 7th and 8th year, was Rs  17350 and Rs 18391 respectively. Find the rate of interest per annum.

3

3

12

12

6

6

9

9

Once you attempt the question then PrepInsta explanation will be displayed.

Start

Question 9

Time: 00:00:00

A sum of money invested at Compound Interest triples itself in 17 years. In how many years will it become 81 times itself.

71 years

71 years

85 years

85 years

15 years

15 years

29 years

29 years

Once you attempt the question then PrepInsta explanation will be displayed.

Start

Question 10

Time: 00:00:00
Donald borrowed a sum of Rs 82,000 at 10% p.a compound interest for 2 years. He repaid some amount at the end of 1st year. If Donald cleared the debt by repaying Rs 31900 at the end of the 2nd year. How much did he repay at the end of 1st year?

61200

61200

64500

64500

67100

67100

65000

65000

Once you attempt the question then PrepInsta explanation will be displayed.

Start

["0","40","60","80","100"]
["Need more practice!","Keep trying!","Not bad!","Good work!","Perfect!"]

Personalized Analytics only Availble for Logged in users

Analytics below shows your performance in various Mocks on PrepInsta

Your average Analytics for this Quiz

Rank

-

Percentile

0%

Completed

0/0

Accuracy

0%

Prime

#### Prime Video

Complete Video Course for Zoho

for Zoho
Get Prime Video

Prime

#### Prime Mock

Mock Subscription for zoho

for Zoho
Get Prime Mock


text:
## tisdag 13 maj 2014

### Parameter-Free Fluid Models: How to Make Einstein Happy

In recent work (here and here) we have shown that mean-value outputs of computed turbulent solutions of the incompressible Navier-Stokes equations with small viscosity, vary little with the absolute value of the viscosity. This makes this mathematical model to an example of Einstein's ideal as a physics model without parameters or coefficients requiring experimental determination.

For example, we show in New Theory of Flight that the lift and drag of an airplane can be accurately computed using this model, thus ab initio without input of any experimental measurement. This is very remarkable and would have made Einstein very happy.

Augmenting this model to include self-gravitation as in the blog post Equivalence of Inertial and Heavy Mass, gives a parameter-free cosmological model, by choosing the unit of mass so that
• $\Delta\phi (x,t) = \rho (x,t)$,
where $\phi (x,t)$ is the gravitational potential and $\rho (x,t)$ mass density for a given unit of length specified by the $x$ coordinate, and the unit of time $t$ so that Newton's 2nd law takes the form
• $\ddot x = - \nabla\phi (x,t)$,
connecting particle accelleration $\ddot x(t)$ to the gradient $\nabla\phi (x,t)$, where $x(t)$ is the trajectory of a particle of unit mass.

Such a  model can describe galactic scales after galaxy and star formation from interstellar dust under compression, as an incompressible fluid of small viscosity under self-gravitation, without any parameter to determine experimentally. This could have made Einstein even happier.


text:
weird MAplot or volcano plot of DESeq2 diff result
3
0
Entering edit mode
13 months ago

Hi, every one. I find a werid MAplot or volcano plot of DESeq reuslt. I am wondering whether you can give me some advice.

This diff result is from two cell type bulk RNA-seq. I use two specific marker to get these two cell type using Flow cytometer. I alreadly know these cell type have very different RNA composition.

As you can see, the MA-plot is not like DESeq2 manul example. And the volcano plot is more werid, it looks like -log10(padj) is the linear function of log2FoldChange.

have post same question in Bioconductor support. Here is the link.

If you can not see the picture, Here is the two link

MA-plot:

Volcano:

If you want to repeat my data, here is my data link:

And here is my code

# Prepare -----------------------------------------------------------------

library(DESeq2)
library(dplyr)

library(ggplot2)

# Set Options
options(stringsAsFactors = F)

row.names = 1)

coldata <- data.frame(row.names = colnames(data),
type = rep(c("Fx593", "Fx600"), each = 2))

# DESeq2 ------------------------------------------------------------------

dds <- DESeqDataSetFromMatrix(countData = data,
colData = coldata,
design= ~ type)
# PCA
vsd <- vst(dds)
plotPCA(vsd, intgroup = "type")

dds <- DESeq(dds)

res_lfc <- lfcShrink(dds = dds,
type = "ashr",
coef = "type_Fx600_vs_Fx593")

plotMA(res_lfc)

as_tibble(res_lfc) %>%
)) %>%
ggplot(aes(x = log2FoldChange, y = -log10(padj))) +
geom_point()
> sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: CentOS Linux 7 (Core)

Matrix products: default
BLAS:   /opt/sysoft/R-3.6.1/lib64/R/lib/libRblas.so
LAPACK: /opt/sysoft/R-3.6.1/lib64/R/lib/libRlapack.so

locale:
[1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8       LC_NAME=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] parallel  stats4    stats     graphics  grDevices utils     datasets  methods
[9] base

other attached packages:
[1] ggplot2_3.3.3               dplyr_1.0.5
[3] DESeq2_1.26.0               SummarizedExperiment_1.16.0
[5] DelayedArray_0.12.0         BiocParallel_1.19.6
[7] matrixStats_0.58.0          Biobase_2.46.0
[9] GenomicRanges_1.38.0        GenomeInfoDb_1.22.0
[11] IRanges_2.20.0              S4Vectors_0.24.0
[13] BiocGenerics_0.32.0

loaded via a namespace (and not attached):
[1] bitops_1.0-7           bit64_4.0.5            doParallel_1.0.15
[4] RColorBrewer_1.1-2     tools_3.6.1            backports_1.2.1
[7] utf8_1.2.1             R6_2.5.0               rpart_4.1-15
[10] Hmisc_4.5-0            DBI_1.1.1              colorspace_2.0-1
[13] nnet_7.3-16            withr_2.4.2            tidyselect_1.1.0
[16] gridExtra_2.3          bit_4.0.4              compiler_3.6.1
[19] cli_2.5.0              htmlTable_2.1.0        labeling_0.4.2
[22] scales_1.1.1           checkmate_2.0.0        SQUAREM_2017.10-1
[25] genefilter_1.68.0      mixsqp_0.2-2           stringr_1.4.0
[28] digest_0.6.27          foreign_0.8-73         XVector_0.26.0
[31] pscl_1.5.2             base64enc_0.1-3        jpeg_0.1-8.1
[34] pkgconfig_2.0.3        htmltools_0.5.1.1      fastmap_1.1.0
[37] htmlwidgets_1.5.3      rlang_0.4.11           rstudioapi_0.13
[40] RSQLite_2.2.7          generics_0.1.0         farver_2.1.0
[43] RCurl_1.98-1.3         magrittr_2.0.1         GenomeInfoDbData_1.2.2
[46] Formula_1.2-4          Matrix_1.3-2           Rcpp_1.0.6
[49] munsell_0.5.0          fansi_0.4.2            lifecycle_1.0.0
[52] stringi_1.5.3          MASS_7.3-54            zlibbioc_1.32.0
[55] grid_3.6.1             blob_1.2.1             crayon_1.4.1
[58] lattice_0.20-44        splines_3.6.1          annotate_1.64.0
[61] locfit_1.5-9.4         knitr_1.33             pillar_1.6.0
[64] geneplotter_1.64.0     codetools_0.2-18       XML_3.99-0.3
[67] glue_1.4.1             packrat_0.5.0          latticeExtra_0.6-29
[70] data.table_1.12.6      png_0.1-7              vctrs_0.3.8
[73] foreach_1.4.7          gtable_0.3.0           purrr_0.3.3
[76] assertthat_0.2.1       ashr_2.2-39            cachem_1.0.4
[79] xfun_0.22              xtable_1.8-4           survival_3.2-11
[82] truncnorm_1.0-8        tibble_3.1.1           iterators_1.0.12
[85] AnnotationDbi_1.48.0   memoise_2.0.0          cluster_2.1.2
[88] ellipsis_0.3.2

RNA-seq DESeq2 • 2.1k views
2
Entering edit mode
13 months ago
ATpoint 65k

Just to reference my comment from the cross-post, the main issue here is probably that the majority of genes has zeros in at least two or more of the four samples which then makes it difficult to come up with any kind of meaningful fold change estimation, which then causes these spurious DE calls in the MA-plot: https://support.bioconductor.org/p/9139060/#9139066

You can even test yourself that replicate number is not the issue here by simply a mocking up 20 samples per group (just copying the samples that you have 10 times) and then repeat the analysis. The MA-plots look similar towards the odd shape while prefiltering removes most of that. Code here, MA-plots below (not colored for significant genes as this would make things too messy here for the eye). While prefiltering is not strictly necessary for DESeq2 it seems to make sense here due to the large number of genes with some, but very low counts and many zeros.

0
Entering edit mode

agree. I jotted out some pseudocode for him, let me know if you see any probs with it

0
Entering edit mode

I updated my answer with a short demo that replicate number (imo) is not the issue here but prefiltering is.

0
Entering edit mode

Thanks, AT.

I believe your answer is right. The too many 0 count gene makes lfc shrink not work very well.

And I also find a interesting thing about lfc shrink algorithms in this type data

https://support.bioconductor.org/p/9139079/

1
Entering edit mode
13 months ago
Martombo ★ 3.0k

I was wondering how a PCA plot would look like for your data. As you mentioned, you are comparing very different cell types, that are likely to have a very different transcriptome. I also see that you only have two replicates each, four samples in total, so I believe that you cannot assess variation in each cell type very well. Therefore I would say it's not very surprising to see that there are a lot of genes with a very significant difference in expression, which goes hand in hand with the logFC. If there's little variation among replicates, bigger changes will lead to higher statistical significance.

1
Entering edit mode

The replicate may be the issue as Martombo mentioned. Generally, you need at least 3 replicates, especially with DESeq that is recommended for three and more replication. You can try edgeR that can handle even one replicate.

0
Entering edit mode

Please correct me if I misunderstand something.

Most variation is on PC1(79%), but FX600 replicates variation is samll on PC1, so I believe within-group replicate is good.

And if variation is big within replicates, there should be much no-significant genes in volcano plot, but as you can see, the diff gene number is big.

0
Entering edit mode

seta - that's interesting. Do you know why edgeR is better in those ...er.. edge cases (with low numbers of replicates)?

0
Entering edit mode

Hi，Martombo.

Here is my PCA result.

As you mentioned,

If there's little variation among replicates, bigger changes will lead to higher statistical significance.

But when I do other normal bulk RNA-seq, the variation among replicate is also small, but the volcano or MA-plot will not be so weird.

0
Entering edit mode

Based on your PCA, there is a large variation for two replicates of FX600 sample, that could affect DE results. In fact, we expect more between-group variation than a within-group variation to obtain desirable results.

1
Entering edit mode
13 months ago
Vincent Laufer ★ 2.4k

I think you are missing some standard QC from your code. I would start by adding the following to your code:

My_Threshold<-10
ddsHTSeq_remove_zeros <- ddsHTSeq_coding[ rowMeans(counts(ddsHTSeq_coding)) > My_threshold, ]
dds<-ddsHTSeq_remove_zeros

You might also use something like rowMedians to account for the point that ATpoint is making, as well.

0
Entering edit mode

This isn't directly related, but I also want to mention it can be good to run QC of other kinds as well; for example my code base reads like the following:

gene_types <- read.table(paste(meta_data_dir, "/ensembl_gene_type.txt", sep=""), sep=",", stringsAsFactors=F, header=T) #
protein_coding <- gene_types[gene_types$Gene.type == "protein_coding", ] # make list of only coding genes ddsHTSeq_coding <- relevelled_dds[(rownames(counts(relevelled_dds)) %in% protein_coding$Gene.stable.ID),]   # Remove non-protein coding transcripts
ddsHTSeq_remove_zeros <- ddsHTSeq_coding[ rowMeans(counts(ddsHTSeq_coding)) > count_threshold, ]                            # Remove genes with no reads first, so that quartiles can be calculated
dds<-ddsHTSeq_remove_zeros
design(dds)<-design_statement
dds_to_compare[[ platform_name ]]<-dds

the first few lines restrict to protein coding genes etc; not appropriate for every analysis but just presenting it to give you ideas. Good luck!


text:
# Phosphorylation at $$Ser^{26}$$ in the ATP-Binding Site of $$Ca^{2+}$$/Calmodulin-Dependent Kinase II as a Mechanism for Switching off the Kinase Activity

 Title: Phosphorylation at $$Ser^{26}$$ in the ATP-Binding Site of $$Ca^{2+}$$/Calmodulin-Dependent Kinase II as a Mechanism for Switching off the Kinase Activity Author: Yilmaz, Mehtap; Gangopadhyay, Samudra Saurabh; Leavis, Paul Clifton; Grabarek, Zenon; Morgan, Kathleen G. Note: Order does not necessarily reflect citation order of authors. Citation: Yilmaz, Mehtap, Samudra Saurabh Gangopadhyay, Paul Clifton Leavis, Zenon Grabarek, and Kathleen G. Morgan. 2013. Phosphorylation at $$Ser^{26}$$ in the ATP-binding site of $$Ca^{2+}$$/calmodulin-dependent kinase II as a mechanism for switching off the kinase activity. Bioscience Reports 33(2): e00024. Full Text & Related Files: 3566533.pdf (993.5Kb; PDF) Abstract: CaMKII $$(Ca^{2+}$$/calmodulin-dependent kinase II) is a serine/threonine phosphotransferase that is capable of long-term retention of activity due to autophosphorylation at a specific threonine residue within each subunit of its oligomeric structure. The $$\gamma$$ isoform of CaMKII is a significant regulator of vascular contractility. Here, we show that phosphorylation of CaMKII $$\gamma$$ at $$Ser^{26}$$, a residue located within the ATP-binding site, terminates the sustained activity of the enzyme. To test the physiological importance of phosphorylation at $$Ser^{26}$$, we generated a phosphospecific $$Ser^{26}$$ antibody and demonstrated an increase in $$Ser^{26}$$ phosphorylation upon depolarization and contraction of blood vessels. To determine if the phosphorylation of $$Ser^{26}$$ affects the kinase activity, we mutated $$Ser^{26}$$ to alanine or aspartic acid. The S26D mutation mimicking the phosphorylated state of CaMKII causes a dramatic decrease in $$Thr^{287}$$ autophosphorylation levels and greatly reduces the catalytic activity towards an exogenous substrate (autocamtide-3), whereas the S26A mutation has no effect. These data combined with molecular modelling indicate that a negative charge at $$Ser^{26}$$ of CaMKII $$\gamma$$ inhibits the catalytic activity of the enzyme towards its autophosphorylation site at $$Thr^{287}$$ most probably by blocking ATP binding. We propose that $$Ser^{26}$$ phosphorylation constitutes an important mechanism for switching off CaMKII activity. Published Version: doi:10.1042/BSR20120116 Other Sources: http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3566533/pdf/ Terms of Use: This article is made available under the terms and conditions applicable to Other Posted Material, as set forth at http://nrs.harvard.edu/urn-3:HUL.InstRepos:dash.current.terms-of-use#LAA Citable link to this page: http://nrs.harvard.edu/urn-3:HUL.InstRepos:10646382 Downloads of this work: